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. spl_autoload_register 和 __autoload()魔术方法

    在 PHP 5.3 之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误(Fatal Error).  尽管 __autoload() 函数也能自动加载类和接口 ...

  2. SpringCloud:Feign模块引用版本问题

    1.问题报错 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import cand ...

  3. 【牛客】路径计数机 (树形dp 前缀和)

    题目描述 有一棵n个点的树和两个整数p, q,求满足以下条件的四元组(a, b, c, d)的个数:  1.$1\leq a,b,c,d \leq n$  2.点a到点b的经过的边数为p.  3.点c ...

  4. DNS基本操作详解

    在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态 ...

  5. SpringMVC(十六):如何使用编程方式替代/WEB-INF/web.xml中的配置信息

    在构建springmvc+mybatis项目时,更常用的方式是采用web.xml来配置,而且一般情况下会在web.xml中使用ContextLoaderListener加载applicationCon ...

  6. 七年老运维实战中的 Shell 开发经验总结【转】

    无论是系统运维,还是应用运维,均可分为“纯手工”—> “脚本化”—> “自动化”—>“智能化”几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避 ...

  7. 一篇文章理解Redis集群【转】

    Redis作为一款性能优异的内存数据库,支撑着亿级数据量的社交平台,也成为很多互联网公司的标配.这里将以Redis Cluster 集群为核心,基于最新的Redis5版本,从原理到实战,玩儿转Redi ...

  8. C++11原子操作与无锁编程(转)

    不讲语言特性,只从工程角度出发,个人觉得C++标准委员会在C++11中对多线程库的引入是有史以来做得最人道的一件事:今天我将就C++11多线程中的atomic原子操作展开讨论:比较互斥锁,自旋锁(sp ...

  9. NPU TPU

    https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

  10. CentOS 7 卸载OpenJdk安装Oracle Jdk1.8

    CentOS 7 卸载OpenJdk安装Oracle Jdk1.81.查询openjdk:rpm -qa | grep jdk2.卸载OpenJdkrpm -e --nodeps 查询到的结果3.安装 ...