1

D2010 プロ、Win Vista 32bit:

ファイルのディレクトリとそのサブフォルダーを解析し、ファイル情報 (名前、種類、サイズ、変更日... Windows エクスプローラーの列) をメモリに読み込む必要があります。これまでのところ、このタスクにインメモリ テーブルを使用することを検討しましたが (当然の選択のようです)、オーバーヘッドのためにまだ躊躇しています。オブジェクトの TDictionary もオプションかもしれませんが、よくわかりません。最も重要なのは、速度と、昇順または降順で列を並べ替える機能です。

ご意見やご提案をいただければ幸いです。

ありがとう -フィル

4

1 に答える 1

3

インメモリ データベースを使用することも 1 つのオプションですが、実際には非常に単純な問題に対しては、非常に負荷の高いソリューションのように思えます。考慮すべき別のオプションは、さまざまなファイルの詳細でTList<TFileDetails>where TFileDetailsisを使用することです。record

並べ替えに関しては、最も効率的な方法は、並べ替えたい列ごとにインデックスを維持することです。したがって、インデックスは、特定の列で並べ替えられたときのレコードの順序を表す整数の単純な配列です。したがって、 のインデックス配列は[1, 2, 0]、最初のアイテムがインデックス 1、2 番目がインデックス2、3 番目がインデックスであることを意味します0。これを行うと、必要な場合にのみ各列でソートする必要があり、一度だけ実行する必要があることを意味します。

とはいえ、多数のファイルがある場合は、個別のインデックス配列を維持するだけで済みます。必要なときにオンデマンドで並べ替えるだけで、パフォーマンスが許容できる場合があります。それがエクスプローラーの機能だと思います。

パフォーマンスの制約がわからないため、どのオプションが問題に適しているかについてアドバイスすることはできません。ただし、要約すると、複雑さを増すための主なオプションは次のとおりです。

  1. オンデマンドでリストを使用TList<TFileDetails>して再ソートします。
  2. TList<TFileDetails>必要に応じてインデックス配列を使用、構築、保持します。
  3. インメモリ データベースを使用します。
于 2013-05-03T17:57:04.597 に答える