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或者其他组件吧。

你可能感兴趣的:(高性能服务器,测试,TBytes,性能)