DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 27
在线用户: 16
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/25 15:23:24
标题:
xe7的类系列化为json太慢了 浏览:4522
加入我的收藏
楼主:   TObj1 = class
  private
    F_i: Integer;
    f_d: TDateTime;
    f_s: string;
  public
    property field_s: string read f_s write f_s;
    property field_i: Integer read F_i write F_i;
    property field_d: TDateTime read f_d write f_d;
  end;


procedure TForm81.SpeedButton19Click(Sender: TObject);
var
  Foo: TObj1;
  i: Integer;
  d1, d2: TDateTime;
  tmp: string;
begin
  d1 := now;
  for I := 1 to 1000 do
  begin
    Foo := TObj1.Create;
    try
      Foo.field_s := 'Hello World';
      Foo.field_i := 42;
      Foo.field_d := now;
      tmp := TJson.ObjectToJsonString(Foo);
    finally
      Foo.Free;
    end;
  end;
  d2 := now;
  Writeln(tmp);
  writeln(FormatDateTime('ss.zzz', d2 - d1));

  Foo := TJson.JsonToObject<TObj1 > (tmp);
  try
    writeln(Foo.field_s);
    writeln(Foo.field_i.ToString);
    writeln(FormatDateTime('yyyy-mm-dd hh.nn.ss', Foo.field_d));
  finally
    Foo.Free;
  end;
end;


 一千条好几秒,这样的东西是用不上服务器端的,服务器上解析每秒10万次都嫌慢,不过这样也有好处,能等级化开发队伍
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2014/9/25 16:29:40
1楼: 它是用RTTI的,如果是你自己的类,你知道有哪些属性.直接写json应该会快一些吧.
你可以试试
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/25 16:39:47
2楼: 谢谢老大。我这几天有空,对比了下java/net的系列化,有感而发吧了,感觉emb什么都有,但实用性还差还几公里
----------------------------------------------
-
作者:
男 msfm (清洁工) ★☆☆☆☆ -
盒子活跃会员
2014/9/25 17:18:51
3楼: 不明觉厉
----------------------------------------------
-
作者:
男 drroc (mvcxe) ★☆☆☆☆ -
盒子活跃会员
2014/9/26 11:29:07
4楼: 楼主测一下superobject的效率
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2014/9/26 11:33:42
5楼: QJson.FromRtti
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/26 12:27:44
6楼: superobject的效率约QJson的一半不到,但用开了superobject,就接受其低效
----------------------------------------------
-
作者:
男 joesyuan (joes) ★☆☆☆☆ -
盒子活跃会员
2014/9/26 17:35:46
7楼: 纯算法的东西在这里PK,似乎有点儿无聊。
----------------------------------------------
-我爱Delphi6
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/26 17:55:32
8楼: 怎么会无聊?我想既然xe7带了系列化,就相信它,但实际每秒系列化不到1千条,这就垃圾级了,我的期望是每秒100万,但测了好几个封装,都20万以下,但勉强用吧,至于1千,那是粗糙的模型
----------------------------------------------
-
作者:
男 lsz100 (lsz) ★☆☆☆☆ -
盒子活跃会员
2014/9/26 19:24:41
9楼: 一条1K 每秒100万 哪是1000000K 每秒就要处理1G的数据 要大型机了
----------------------------------------------
我为人人为我
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/26 19:49:23
10楼: 也许我没写清楚,但也没有提到1k一条,我所说的是xe7自带的TJson.ObjectToJsonString非常慢,几个字段,一秒序列化不到一千条。做为服务器的通信的基础构件,我期望是每秒100万条级,我测了下大多json约20万,QJson和dwjson都非常快,其他好几个都慢
----------------------------------------------
-
作者:
男 drroc (mvcxe) ★☆☆☆☆ -
盒子活跃会员
2014/9/26 21:51:29
11楼: 想不花钱,不出力,就有百万级的性能,哪有这么好的事?

就算是程序员最多的java界,也要阿里这样体量的公司才能搞出个百万级的json库fastjson

至于delphi自带的,大部份都是桌面级的,稳定好用就行了,有特别需求自己写,不然怎么体现你程序员的价值呢?
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/26 22:01:24
12楼: 我买过两个delphi版,但后面的版真买不下手,bug太多, 每版都试一下,看看能否可靠些。至于json的问题QJson速度已经弄的很好了,但xe7自带的真太慢了,一秒不到1千条,在我看来这不好想象,随便一个开源都每秒10万。此外dataSnap也很一般,按我看来也就模型级别
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2014/9/28 21:39:01
13楼: 呵呵,以后想当长一段时间,Delphi的东西只会以最慢,最臃肿的形式呈现。
能实现出来,没BUG已经是谢天谢地了。

贴一段XE6中的新代码:
constructor TBitmapSurface.Create();
begin
  inherited;

  FBits := nil;
  FPitch := 0;
  FWidth := 0;
  FHeight := 0;
  FPixelFormat := TPixelFormat.None;
  FBytesPerPixel := 0;
end;

好NB的初始化,几乎用过几年的Delphi程序员都知道,Delphi对象默认成员全部清0。但维护FMX的EMB的技术大神们不知道这个显而易见的事实。BUG我已经在QC中提交了。这么容易修改的东西,只需要将整个函数删除,效率就可以提升。但目前仍然是Open状态。

在EMB,没人关心效率。那个不能忽悠人,没噱头。这是现实。
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2014/9/28 22:00:12
14楼: DelphiXE7:

  1.随便建立一个VCL程序
  2.加入64-bit windows 的Target platform
  3.切换到Release
  4.打开Release configuration - 64-bit Windows platform的Debug Information
  5.设置断点,并调试,断点无效

DelphiXE2 - DelphiXE6 同样的操作是可以调试的。
甚至于在DelphiXE7的32bit Release中也是可以调试的,仅64bit Release不行

有这样的BUG,我可以接受,不能接受的是,当我在QC中提交这个Bug时,
得到的答复竟然是 Test Case Error.
----------------------------------------------
-
作者:
男 ceteric (ceteric) ★☆☆☆☆ -
普通会员
2014/9/28 22:09:56
15楼: delphi目前就是这样啊,
如果开始新项目,对企业的还好,对个人用户的,老老实实用各个平台自己的解决方案吧,否则又大又慢,没有竞争力的。
----------------------------------------------
-
作者:
男 wzca (wzca) ★☆☆☆☆ -
普通会员
2014/9/29 9:01:19
16楼: @zwjchinazwj (蒲石)

Release 模试还能调试?
想调试为啥不用Debug模式呢,这不用专门用来调试的吗
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2014/9/29 12:15:27
17楼: @wzca

Release模式为什么不能调试?你看看哪个编译器Release不能调试。只要有调试符号信息,就可以调试,与Debug Release毫无关系。

Release有可能开启编译优化,生成的opcode与Debug可能差别甚大。Debug不出问题的程序,放在Release下,就出问题,你不调试,如何确定问题??

而且我还明确的告诉你,同样的代码在Delphi下不止1种情况下Release Debug会产生不一样的结果。

最后,无论你是用Delphi几,除了XE7以外,只要在工程选项中包含调试信心,无论Debug和Release,都可以调试。你回去试试你的Delphi7看看。
----------------------------------------------
-
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2014/9/29 12:32:51
18楼: 请教楼上zwjchinazwj,我还停在32位,Delphi64位真比32优秀?我的感觉64我用不上,执行且慢。32位程序能用在32及64位的操作系统上,编译后一个程序就通用(xp/win7-32/win7-64/win2003-2008等),发布容易,反之则不行。但我没比较过64位操作系统上执行Delphi编译成32程序与64的程序性能差别
----------------------------------------------
-
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2014/9/29 13:08:44
19楼: 在服务器程序方面,32bit程序内存有2GB的限制,即使使用PEFlag,也只能到3G

64位程序则基本没有内存使用的限制。,至于性能,64bit到未必比32bit快。现在还只盯着客户端程序,那是要走向穷途末路。
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2014/9/30 20:45:07
20楼: to zwjchinazwj (蒲石)
64位调试那个我记得好像是可以调试的,但是似乎64位有个问题,切换平台或者编译选项,它认为代码没变,不会重新编译,而是使用原来的DCU.
clean一下,再编译
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 zwjchinazwj (蒲石) ★☆☆☆☆ -
普通会员
2014/9/30 23:24:39
21楼: to wr960204 (武稀松)
我还不至于不检查一下是否clear了。我跟踪这个问题,每次都会clear的。

另外,64bit release是可以调试,需要选择 Limit Debug Information就可以调试,选择Debug Information反而不行。从命令的编译指令看 前者使用了 -$D1 后者使用了-$D0,这个-$D,dcc64.exe的帮助中没有说明具体有什么用。

我认为是IDE的问题,原来compiler选项中,是选择有或者没有调试信息,XE7中改成了下拉选择。 我认为就是这个改动导致改出毛病来了。
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2017/11/18 10:16:13
22楼: 刚用D10.2测试楼主的代码,垃圾电脑 i5-3470,1秒5万条。

用D10.2 最新的 System.Json.Serializers.TJsonSerializer 测试,1 秒10万了。

还是进步很大的。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行46.875毫秒 RSS