小
小雨哥
Unregistered / Unconfirmed
GUEST, unregistred user!
其实也无所谓好和坏,因为各自的用途并不完全相同,能合理地利用好就算是好。
TStringList 其实保存了二个项目:String和Pointer,其中的Add和直接调用AddObject是
一样的,在对TStringList中的String赋值时,TStringList中采用了人工优化,即不使用
StrCat方法,直接先分配内存然后Move。这个速度是非常快的。
对于String来说,其标准的行为是非常中规中矩,先计算长度、而后分配内存,再进行赋值
操作,这样的效率对于短小的String来说,也没什么好计较的,但是如果碰上了成千上万的
巨型String来说,显然是不合适的,所以 Delphi 对 String 格外开恩,提供了不少对它进
行快速操作的方法,就是在基本代码中,也尽量提供好的效率,比如 SetString 函数,和
Move 函数。
所以,如果在测试比较中,不考虑各自的用途,纯粹为测试而测试,对于二者的比较是不算
公平的,只有明白他们在各自的领域中的角色,才能在我们实际使用中随心所欲。
TStringList 其实保存了二个项目:String和Pointer,其中的Add和直接调用AddObject是
一样的,在对TStringList中的String赋值时,TStringList中采用了人工优化,即不使用
StrCat方法,直接先分配内存然后Move。这个速度是非常快的。
对于String来说,其标准的行为是非常中规中矩,先计算长度、而后分配内存,再进行赋值
操作,这样的效率对于短小的String来说,也没什么好计较的,但是如果碰上了成千上万的
巨型String来说,显然是不合适的,所以 Delphi 对 String 格外开恩,提供了不少对它进
行快速操作的方法,就是在基本代码中,也尽量提供好的效率,比如 SetString 函数,和
Move 函数。
所以,如果在测试比较中,不考虑各自的用途,纯粹为测试而测试,对于二者的比较是不算
公平的,只有明白他们在各自的领域中的角色,才能在我们实际使用中随心所欲。