我需要选择一种存储和访问已排序字符串的方式,有以下几种选择:
TStringList
字符串动态数组
字符串单向链表
TList<string>
在什么情况下,每种方法都比其他方法更好?
哪个适合小列表(少于10个项目)?
哪个适合大列表(超过1000个项目)?
哪个适合超大列表(超过1,000,000个项目)?
哪个可用于最小化内存使用?
哪个可用于添加额外项目到末尾的最短加载时间?
哪个可用于最小化从头到尾访问整个列表所需的访问时间?
基于这些条件或其他条件,哪种数据结构更好?
参考资料:我正在使用 Delphi 2009。
Dimitry 在评论中说:
描述你的任务和数据访问模式,然后就可以给你一个确切的答案了
好的。我的家谱程序有很多数据。
对于每个人,我有许多事件和属性。我把它们存储为短文本字符串,但对于每个人,这些事件和属性有很多,数量从0到几百不等。而且我有成千上万的人。我不需要随机访问它们。我只需要将它们作为已知顺序的一些字符串与每个人相关联。这是我的数千个“小列表”情况。它们需要时间来加载和使用内存,并且如果我需要全部访问它们(例如导出整个生成的报告),则需要时间来访问。
我有几个更大的列表,例如“虚拟”树视图部分名称的所有名称,可以有数十万个名称。再次强调,我只需要一个按索引访问的列表。为了提高效率,这些信息被单独存储于树视图之外,只有在需要时才会检索。这需要一段时间来加载,并且对我的程序非常消耗内存。但是由于每次仅访问其中的几个,所以我不必担心访问时间。
希望这能让您了解我试图实现什么。
p.s. 我在StackOverflow上发布了很多关于优化Delphi的问题。我的程序可以在8秒钟内读取100,000人的25 MB文件,并为他们创建数据结构、报告和树视图,但使用了175 MB的RAM。我正在努力减少它,因为我的目标是在32位Windows中加载几百万人的文件。
我刚刚在这个StackOverflow问题中找到了一些优化TList的绝佳建议:
Is there a faster TList implementation?