私には選択肢があります。
保存してアクセスする必要がある、既に注文された文字列が多数あります。以下を使用して選択できるようです:
TStringList
文字列の動的配列、および
文字列のリンク リスト (単方向リンク)
アランはコメントで、私も選択肢に追加することを提案しました。
TList<string>
これらのそれぞれが他のものよりも優れているのはどのような状況ですか?
小さなリスト (10 項目未満) に最適なのはどれですか?
大規模なリスト (1000 項目以上) に最適なのはどれですか?
巨大なリスト (1,000,000 アイテム以上) に最適なのはどれですか?
メモリ使用量を最小限に抑えるにはどれが最適ですか?
最後に余分なアイテムを追加するために読み込み時間を最小限に抑えるのに最適なのはどれですか?
最初から最後までリスト全体にアクセスするためのアクセス時間を最小限に抑えるには、どれが最適ですか?
これに基づいて(または他のものに基づいて)、どのデータ構造が望ましいでしょうか?
参考までに、私は Delphi 2009 を使用しています。
コメントでディミトリーは次のように述べています。
タスクとデータ アクセス パターンを説明すると、正確な回答を得ることができます
わかった。大量のデータを含む家系図プログラムがあります。
人ごとに、いくつかのイベントと属性があります。私はそれらを短いテキスト文字列として保存していますが、0 から数百までの範囲で、1 人あたり多数あります。そして、私は何千人もの人々を持っています。それらへのランダムアクセスは必要ありません。各人物に関連付けられた既知の順序で多数の文字列として関連付けられている必要があるだけです。これは、何千もの「小さなリスト」の私の場合です。それらはロードしてメモリを使用するのに時間がかかり、すべてが必要な場合 (たとえば、生成されたレポート全体をエクスポートするなど) にアクセスするのに時間がかかります。
次に、数十万の名前を持つことができる「仮想」ツリービューのセクションのすべての名前など、いくつかの大きなリストがあります。ここでも、インデックスでアクセスできるリストのみが必要です。これらは効率のためにツリービューとは別に保存され、ツリービューは必要な場合にのみそれらを取得します。これは読み込みに時間がかかり、私のプログラムにとってはメモリに関して非常にコストがかかります。しかし、一度にアクセスされるのはごくわずかなので、アクセス時間を気にする必要はありません。
うまくいけば、これで私が達成しようとしていることのアイデアが得られます。
ps Delphi の最適化に関する多くの質問を StackOverflow に投稿しました。私のプログラムは 100,000 人の 25 MB のファイルを読み取り、8 秒でデータ構造、レポート、およびツリービューを作成しますが、そのために 175 MB の RAM を使用します。32 ビット Windows で数百万人のファイルをロードすることを目指しているため、これを削減するために取り組んでいます。
この StackOverflow の質問で、TList を最適化するためのいくつかの優れた提案を見つけました。 より高速な TList 実装はありますか?