System.JSON   ISuperJSOn   mORMETJSON   QJSON  测试

我在测试时发现系统自带的JSON  占用内存大一但多了就会出现内存泄漏的问题

我用的Flst<T> 来测试,

为了方便大家,把代码发出来

窗体类

object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 398
ClientWidth = 696
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object mmo1: TMemo
Left = 8
Top = 64
Width = 680
Height = 326
Lines.Strings = (
'mmo1')
ScrollBars = ssVertical
TabOrder = 0
end
object btn1: TButton
Left = 206
Top = 8
Width = 91
Height = 25
Caption = 'System.json'
TabOrder = 1
OnClick = btn1Click
end
object btn2: TButton
Left = 303
Top = 8
Width = 75
Height = 25
Caption = 'ISuperJSON'
TabOrder = 2
OnClick = btn2Click
end
object edt1: TEdit
Left = 16
Top = 8
Width = 73
Height = 21
NumbersOnly = True
TabOrder = 3
Text = '100000'
end
object edt2: TEdit
Left = 95
Top = 8
Width = 42
Height = 21
NumbersOnly = True
TabOrder = 4
Text = '10'
end
object btn3: TButton
Left = 384
Top = 8
Width = 89
Height = 25
Caption = 'mORMEtJSON'
TabOrder = 5
OnClick = btn3Click
end
object btn4: TButton
Left = 479
Top = 8
Width = 58
Height = 25
Caption = 'QJSON'
TabOrder = 6
OnClick = btn4Click
end
end

pas 类

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Generics.Collections,
SynCommons, Vcl.StdCtrls, superobject, System.JSON, qjson, IdGlobal;

type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
btn2: TButton;
edt1: TEdit;
edt2: TEdit;
btn3: TButton;
btn4: TButton;
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
Flock: IAutoLocker;
procedure StartJSon(index, num: Integer);
procedure SetSuperobjson(index: Integer; num: Integer);
procedure StartmORMeJSON(index, num: Integer);
procedure StartQJSON(index, num: Integer);
public
{ Public declarations }
end;

const
sjs = '{ "retcode": "1", "datafrom": "server","users": "[{\"id\":1, \"username\": \"liuderu\", \"website\": \"bcoder.com\"},{\"id\":2, \"username\": \"Jeoe\", \"website\": \"baidu.com\"}]"}';

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn2Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(
procedure
var
I23, ind: Integer;
begin
btn2.Enabled := False;
ind := StrToInt(edt2.Text);
for I23 := 0 to ind do
begin
SetSuperobjson(StrToInt(Trim(edt1.Text)), I23);

end;
btn2.Enabled := True;
end).Start;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(
procedure
var
I23, ind: Integer;
begin
btn3.Enabled := False;
ind := StrToInt(edt2.Text);
for I23 := 0 to ind do
begin
self.StartmORMeJSON(StrToInt(Trim(edt1.Text)), I23);

end;
btn3.Enabled := True;
end).Start;
end;

procedure TForm1.btn4Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(
procedure
var
I23, ind: Integer;
begin
btn4.Enabled := False;
ind := StrToInt(edt2.Text);
for I23 := 0 to ind do
begin
self.StartQJSON(StrToInt(Trim(edt1.Text)), I23);

end;
btn4.Enabled := True;
end).Start;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Flock := TAutoLocker.Create;
end;

procedure TForm1.SetSuperobjson(index: Integer; num: Integer);
var
a, b, I, I1: Integer;
db: TList<ISuperObject>;
dt: ISuperObject;
begin

Flock.Enter;
try
a := GetTickCount;
db := TList<ISuperObject>.Create;
for I := 0 to index do
begin
dt := SO(sjs);
db.Add(dt);
end;

FreeAndNil(db);
mmo1.Lines.Insert(0, 'ISuperObject Num +' + IntToStr(num) + 'index:' + IntToStr(index) + ' ' + IntToStr(GetTickCount - a) + '秒');
finally

Flock.Leave;
end;

end;

procedure TForm1.StartJSon(index, num: Integer);
var
a, b, I, I1: Integer;
db: TList<TJSONValue>;
dt: TJSONValue;
db1: TArray<TJSONValue>;
begin

Flock.Enter;
try
a := GetTickCount;
db := TList<TJSONValue>.Create;
for I := 0 to index do
begin
dt := TJSONValue.Create;
TJSONObject(dt).ParseJSONValue(sjs);
db.Add(dt);
end;
for I := 0 to db.Count -1 do
begin
TJSONValue(db[I]).Free;
db[I] := nil;
end;
FreeAndNil(db);
mmo1.Lines.Insert(0, 'System.JSON Num +' + IntToStr(num) + ' index:' + IntToStr(index) + ' ' + IntToStr(GetTickCount - a) + '秒');
finally

Flock.Leave;
end;

end;

procedure TForm1.StartmORMeJSON(index, num: Integer);
var
a, b, I, I1: Integer;
db: TList<variant>;
dt: variant;
begin

Flock.Enter;
try
a := GetTickCount;
db := TList<variant>.Create;
for I := 0 to index do
begin
dt := TDocVariant.NewJSON(sjs);
db.Add(dt);
end;

FreeAndNil(db);
mmo1.Lines.Insert(0, 'mORMetJSON Num +' + IntToStr(num) + ' index:' + IntToStr(index) + ' ' + IntToStr(GetTickCount - a) + '秒');
finally

Flock.Leave;
end;

end;

procedure TForm1.StartQJSON(index, num: Integer);
var
a, b, I, I1: Integer;
db: TQJson;
dt: TQJson;
begin

Flock.Enter;
try
a := GetTickCount;
db := TQJson.Create;
for I := 0 to index do
begin
dt := TQJson.Create;
dt.Parse(sjs);
db.Add(dt);
end;

FreeAndNil(db);
mmo1.Lines.Insert(0, 'QJSON Num +' + IntToStr(num) + ' index:' + IntToStr(index) + ' ' + IntToStr(GetTickCount - a) + '秒');
finally

Flock.Leave;
end;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(
procedure
var
I23, ind: Integer;
begin
btn1.Enabled := False;
ind := StrToInt(edt2.Text);
for I23 := 0 to ind do
begin
StartJSon(StrToInt(Trim(edt1.Text)), I23);
end;
btn1.Enabled := True;
end).Start

end;

end.

delphi xe6 JSON 测试的更多相关文章

  1. Delphi XE6 试用Android视频采集

    FMX支持视频采集,具体见FMX.Media,提供了很类支持音频.视频的处理. 按帮助文档,用Note3做了测试,结果,效率太低,不可用. 具体可查询帮助Video Capturing一节,我就是按这 ...

  2. 《Delphi XE6 android 编程入门教程》推荐

    近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...

  3. 2年后的Delphi XE6

    1.有幸下载到Delphi XE6,下载地址如下: http://altd.embarcadero.com/download/radstudio/xe6/delphicbuilder_xe6_win. ...

  4. Delphi XE6调用javascript

    原文地址:Example of using JavaScript for Google maps in the Delphi XE6   XE6的TWebBrowser新增了EvaluateJavaS ...

  5. Delphi XE6 Android拨号函数

    http://blog.sina.com.cn/s/blog_44fa172f0101rpex.html Delphi XE6 Android拨号函数 (2014-05-07 17:48:51) 转载 ...

  6. delphi xe6 for android 自带控件LocationSensor优先使用GPS定位的方法

    delphi xe6 for android LocationSensor控件默认是优先使用网络定位,对定位精度要求高的应用我们可以修改原码直接指定GPS定位. 修改方法: 将C:\Program F ...

  7. delphi xe6 让 ListView 在 Android 可回弹[根据龟山阿卍原创修改为xe6版本]

    Delphi XE6 找出 FMX.Platform.Android.pas 档案,并复制到自己的 Project 路径里,找到 GetScrollingBehaviour 函数,修改成如下: uni ...

  8. delphi 解析Json格式(转自:http://blog.csdn.net/jayqiang/article/details/7066824)

    SuperObject 是开源的 Delphi 的 JSON 工具包,可生成 JSON 数据以及进行 JSON 解析. unit Unit6; interface uses Windows, Mess ...

  9. YxdJSON - Delphi 高性能 JSON 库(支持RTTI和序列化操作)

    源:YxdJSON - Delphi 高性能 JSON 库(支持RTTI和序列化操作) Delphi 高性能 JSON 库(支持RTTI和序列化操作) 支持平台: Windows, Android, ...

随机推荐

  1. SQL进阶-数据类型转换

    一般有这几种转换: 一.数值型与字符型的转化 ### 数值型转为字符型: –> '65' select cast(65 as char); –> 'A' select char(65); ...

  2. python 虚拟环境指定python版本

    virtualenv --no-site-packages -p python3.7 testenv source testenv/bin/activate deactivate 参考:https:/ ...

  3. SpringCloud:搭建基于Gateway的微服务网关(二)

    0.代码 https://github.com/fengdaizang/OpenAPI 1.引入相关依赖 pom文件如下: <?xml version="1.0" encod ...

  4. mac切图

    1.按住command键位, 两只手指点击需要切的图 2.再在右边栅格化图层 3.选中需要剪切的图层.command+c 和command+n和 command+v OK 切整张图.先 option ...

  5. KD-Tree总结

    KD-Tree总结 问题引入 平面上有\(n\)个点,\(q\)组询问,每一次查询距离\((x,y)\)最近的点对,强制在线. 问题解决 暴力 显然我们可以直接枚举点然后算距离取\(min\),这样子 ...

  6. CloudFlare上线了新的Proxy Anything选项, 支持转发TCP连接

    https://www.nicho1as.wang/articles/cf-proxy-anything.html 申请地址:https://goo.gl/forms/Oc2jyyo0kXsrMyw3 ...

  7. Matlab Script to pre-process UAV123 tracking dataset

    Matlab Script to pre-process UAV123 tracking dataset 2019-11-08 09:43:11 Official project page: http ...

  8. 试图从目录中执行 CGI、ISAPI 或其他可执行程序

    首先来看我遇到问题时的情况,直接上图!   从上图的错误提示信息可以看出,是权限不够,被拒绝访问,开始我以为是我的程序的php程序的原因,但是其他站点没事啊,就对这个站点的权限重新分配了下,给了最高权 ...

  9. odoo开发笔记 -- 提高访问安全性的一种方式

    场景描述: 最近在做项目的过程中,需要需要将odoo应用集成到其他系统中, 在对方的系统中点击我们的应用,打开对应系统,但是界面不做跳转,在当前页面打开,并且浏览器地址栏只显示IP+应用名,不让显示o ...

  10. Mac下GoogleChromeHelper占用内存过高 的一个排查过程记录

    测试需要在Mac上装了个虚拟机,结果忘记限制资源了,直接崩溃重启过一次. 后面限制了一下资源,发现内存占用率还是特别高,其中最高的居然是Chrome相关的一个东西.这让我8G内存该如何是好. 于是查了 ...