TBytes的性能

老规矩,无废话,直接上代码:


procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  dTime: Cardinal;
  //ABytes: RawByteString;
  ABytes: TBytes;
begin
  dtime := GetTickCount;;

  for i := 0 to 1000000 - 1 do
  begin
    SetLength(ABytes, Random(65535) + 1);
  end;

  dTime := GetTickCount - dTime;
  Caption := Format('Elapsed %d ms.', [dTime]);
end;

initialization
  Randomize;

finalization


end.

在我本机测试的结果分别是:46ms和577ms,很显然,这至少有12.5倍的性能差距。普通的客户端程序也许没有什么影响,但对于服务器程序来说,这绝对是灾难!很明显,字符串的速度比Byte的速度快多了。从理论上来讲,编译器的处理方式应该是一样的,但是,实际却差这么多。只能说明一点儿:没有编译器人才真的是最大的问题!

顺便说一下fpc的测试结果:63ms和390ms!

结论:

  尽量使用RawByteString作为数据存储、处理方式。

其他(未做测试):

1.使用TBytes作为字符集转换时会浪费更多时间。

2.可能对数据集的处理有一定影响。

3.Indy以及RTC的内部TBytes处理速度也有一定影响。此时如果需要提高性能,建议换用IOCP或者其他组件吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值