这是一个理论问题,旨在生成Delphi中不同数据存储方式的优缺点查找列表.
假设我们有一个记录:
type TMyRecord = record X,Y,Z: Single; IsValid: Boolean; end;
存储此类记录数组的基本选项是:
> TMyRecord数组;
>带有getter / setter的TList的自定义后代
> TList< TMyRecord> ;;
我特别感兴趣的是#1 vs#3比较,这些差异有多大,特别是在性能方面.
解决方法
&的TList LT; T>优点:
>数组没有用于添加/插入/删除/排序/搜索的有用方法,TList没有.
> TList具有Notify方法,可以覆盖该方法以对项目添加/删除执行某些自定义操作.
&的TList LT; T>缺点:
> TList< T> [i]实际上返回其元素的副本.所以你不能写像TList< TMyRec> [idx] .SomeField:= foo.相反,您必须使用临时变量.数组显然允许这样的表达.
David Heffernan提到了TList< T> .List,它消除了这个缺点;然而,它只出现在XE3中
> TList是一个对象,在不需要时应该在程序结束时删除.
> System.Generics.Collections单元可以为之前未使用System.Classes单元的项目添加大量二进制大小.
对于我自己,我写了TRecordList< T>将项目作为指针操作的类(就像经典的TList一样).