问:TString 与TStringList在D7和D2006下(100分)

  • 主题发起人 xminsong
  • 开始时间
其实也无所谓好和坏,因为各自的用途并不完全相同,能合理地利用好就算是好。

TStringList 其实保存了二个项目:String和Pointer,其中的Add和直接调用AddObject是
一样的,在对TStringList中的String赋值时,TStringList中采用了人工优化,即不使用
StrCat方法,直接先分配内存然后Move。这个速度是非常快的。

对于String来说,其标准的行为是非常中规中矩,先计算长度、而后分配内存,再进行赋值
操作,这样的效率对于短小的String来说,也没什么好计较的,但是如果碰上了成千上万的
巨型String来说,显然是不合适的,所以 Delphi 对 String 格外开恩,提供了不少对它进
行快速操作的方法,就是在基本代码中,也尽量提供好的效率,比如 SetString 函数,和
Move 函数。

所以,如果在测试比较中,不考虑各自的用途,纯粹为测试而测试,对于二者的比较是不算
公平的,只有明白他们在各自的领域中的角色,才能在我们实际使用中随心所欲。
 
在我的机器上,不作优化,当bbq=10000000时,情况如下:
D7
TStringList Loop: 10000000 ElapsedTime: 4359
TStringList Loop: 10000000 ElapsedTime: 4266
TStringList Loop: 10000000 ElapsedTime: 4250

String Loop: 10000000 ElapsedTime: 4812
String Loop: 10000000 ElapsedTime: 4829
String Loop: 10000000 ElapsedTime: 4828
TStringList比String快

D2006
TStringList Loop: 10000000 ElapsedTime: 2562
TStringList Loop: 10000000 ElapsedTime: 2547
TStringList Loop: 10000000 ElapsedTime: 2532

String Loop: 10000000 ElapsedTime: 2188
String Loop: 10000000 ElapsedTime: 2141
String Loop: 10000000 ElapsedTime: 2157
String比TStringList快
对比结果一样[:)],按原计划,今晚11:30结贴。
(决定玩一下D2006)
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部