这是一个理论性问题,旨在生成Delphi中不同数据存储方式的优缺点的查找列表。

假设我们有一个记录:

type
  TMyRecord = record
    X,Y,Z: Single;
    IsValid: Boolean;
  end;

存储此类记录数组的基本选项是:
  • array of TMyRecord;
  • 用getter/setter
  • 定制TList的后代
  • TList<TMyRecord>;

  • 我特别对#1与#3比较感兴趣,两者之间的差异有多少,尤其是在性能方面。

    最佳答案

    TList<T>优点:

  • 数组没有TList提供的用于添加/插入/删除/排序/搜索的有用方法。
  • TList具有Notify方法,可以重写该方法以对项目添加/删除执行一些自定义操作。
  • TList<T>缺点:
  • TList<T>[i]实际上返回其元素的副本。因此,您不能编写类似TList<TMyRec>[idx].SomeField := foo的内容。相反,您必须使用临时变量。数组显然允许这种表达。
    大卫·赫弗南(David Heffernan)提到了TList<T>.List,它消除了这一缺陷。但是,它仅出现在XE3
  • TList是一个对象,应在程序结束时不需要时将其删除。
  • System.Generics.Collections单元可以为以前未使用System.Classes单元的项目添加大量二进制文件。

  • 我自己编写了TRecordList<T>类,该类将项作为指针进行操作(就像经典的TList一样)。

    关于arrays - 在Delphi中使用动态记录数组与List <T Record>的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22215029/

    10-12 15:25