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. 洛谷P1352 没有上司的舞会题解

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  2. GEE windows 环境配置

    参照GEE开发大神的一篇文章GEE学习笔记 三十五:windows下配置本地开发环境 - 无形的风的文章 - 知乎. 按他的顺序下来还是出了点问题,再整理一下自己遇到的问题. 1.安装Google的 ...

  3. js字符串连接

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ...

  4. Oncomine 数据库

    网址  https://www.oncomine.org/resource/login.html Oncomine 是目前世界上最大的癌基因芯片数据库和整合数据挖掘平台,旨在挖掘癌症基因信息.Onco ...

  5. 【Python】[技术博客] 如何对使用PYQT编写的GUI文件进行单元测试

    如何对使用PYQT编写的GUI文件进行单元测试 想要对PYQT编写的GUI文件进行单元测试,我们主要用到QTest QTest里面包含了一些对窗体的各种控件进行模拟操作的函数,通过QTest对窗体进行 ...

  6. 基于cesium的GIS洪水淹没三维模拟系统

    简介: “FloodFreeth3D”是一款对Mike11软件计算的洪水演进结果使用cesium进行淹没演进三维模拟的软件产品.   技术参数: 1. B/S架构,支持多Web浏览器(ie.chrom ...

  7. spring-boot 知识集锦

    1.spring-boot项目在外部tomcat环境下部署 https://blog.csdn.net/james_wade63/article/details/51009423 https://bl ...

  8. Maven name=archetypeCatalog value=internal

    来源 https://www.cnblogs.com/del88/p/6286887.html IDEA根据maven archetype的本质,其实是执行mvn archetype:generate ...

  9. 深入理解Python变量与常量

    深入理解Python变量与常量 变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内 ...

  10. [ ceph ] 基本介绍及硬件配置

    1. Ceph简介 所有的 Ceph 存储集群的部署都始于一个个 Ceph节点.网络和 Ceph存储集群.Ceph 存储集群至少需要一个 Ceph Monitor.一个 Manager和一个Ceph ...