gpt4 book ai didi

delphi - 有没有更快的 TList 实现?

转载 作者:行者123 更新时间:2023-12-03 15:03:12 27 4
gpt4 key购买 nike

我的应用程序大量使用 TList,因此我想知道是否有任何替代实现可以更快或针对特定用例进行优化。

我知道RtlVCLOptimize.pas 2.77 ,其中优化了多个 TList 方法的实现。

但我想知道是否还有其他东西。我也不要求它是 TList 后代,我只需要 TList 功能,无论它是如何实现的。

考虑到 TList 提供的相当基本的功能,完全有可能没有太大的改进空间,但仍然想验证这一点,因此提出了这个问题。

编辑:在我的特定用例中,没有对列表进行排序。有很多列表,其中包含不同数量的元素。我确实用我自己的类替换了 TList,以便记录添加/删除调用的数量和元素的计数。它报告(所有列表的总计):

ListAdd = 15766012; ListRemove = 10630000; ListCount = 5136012

我还可以找出单个列表中元素的最大数量是多少。

我没有什么特别的问题,我只是想知道是否有一种方法可以让它变得更快,就像这些数字一样,即使是很小的改进也会增加。

最佳答案

据我所知,TList 的最大瓶颈之一是大型列表上的删除/提取。删除 item[0] 比删除 Item[Count-1] 慢很多,因为它后面有内存移动。

例如,在包含 65536 个元素的列表上:

while list.Count > 0 do List.Delete(0) //Takes 2 mins to complete

for I := List.Count-1 downto 0 do List.Delete(I) //Takes less than 1 sec

因此,如果您有一个包含数百万个元素的 TList,则删除低索引项可能会导致性能代价高昂。另外,请考虑一下,如果列表未排序,则在其中查找元素的速度会非常慢。 IndexOf 在大型列表上非常慢。您可能需要考虑保持列表排序。

此外,考虑到您的项目数量可能非常大,您可能需要考虑使用 TList 列表来存储元素,这将有助于减少我已经提到的删除/提取开销。

关于delphi - 有没有更快的 TList 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com