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. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  2. 关于wineQQ8.9.19983deepin23版本提升不能在使用请升级,Linux偷懒升级方法

    安装wineQQ8.9.19983deepin23版本后提示,不在提供服务请升级. 第一步 前往QQ官方下载Windows最先版本QQ https://qd.myapp.com/myapp/qqtea ...

  3. SpringBoot:使用Jenkins自动部署SpringBoot项目(一)环境准备

    1.安装JDK 1.在java官网下载linux下的安装包,上传到云服务器 /user/java 目录下 2.解压:tar xzvf jdk-8u161-linux-x64.tar.gz 3.为了好看 ...

  4. 在 Ubuntu/Debian 下安装 PHP7.3 教程

    介绍 最近的 PHP 7.3.0 已经在 2018 年12月6日 发布 GA,大家已经可以开始第一时间体验新版本了,这里先放出 PHP7.3 安装的教程以便大家升级. 适用系统: Ubuntu 18. ...

  5. 安全测试基础-SQL注入详解

    1:什么是SQL注入 SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行. www.xx.com/news.php?id=1 ...

  6. enable device: BAR 0 [mem 0x00000000-0x003fffff] not claimed

    /******************************************************************************* * enable device: BA ...

  7. C# winform选择文件、选择文件夹、打开文件

    文章来自博客园友,这里只是做一下笔记. 来源:https://www.cnblogs.com/liuqifeng/p/9149125.html 一.选择文件用OpenDialog OpenFileDi ...

  8. groupby 的妙用(注意size和count)

    Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚. 今天,我们一起来领略下groupby()的魅力吧. 首先,引入相关package: ...

  9. vue + axios + formdata 上传文件带参数的爬坑之路

    submitForm(event) { let formData = new FormData() formData.append('name', this.name) formData.append ...

  10. 【GMT43智能液晶模块】例程二十一:DMA LAN实验——高速数据传输测速

    源代码下载链接: 链接:https://pan.baidu.com/s/1wQomZvOUP9_ZslZus_NSIA 提取码:3fmf 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...