0

特に、特定のパス内のファイルの存在をチェックするプログラムを更新しています。ファイルは、メイン パスから離れた多くのサブディレクトリのいずれかに配置できます。以前は、特定のパターンに一致するファイルをこのパス全体で検索していましたが、更新の一部として、予想されるファイルのリストを含む別の配列が作成されました。

その配列の存在を考えると、私が検討している 2 つのオプションがあります。

  1. 同じ呼び出しを使用してDirectory.EnumerateFiles(startingPath, pattern, SearchOption.Alldirectories)、配列に対して結果を確認します (おそらくラムダを介して)。

  2. File.Exists()配列の各メンバーに対して複数の呼び出しを使用します。

平均的なケースでは、特定の呼び出しに対して配列内の 3 つ以下のファイルについて話しています。ハイエンドのケースでは、私たちはまだダース未満について話している. ほとんどの実行には、数百または数千の呼び出しが含まれます。

このプログラムはすでにリソースを大量に消費しているため、ここでは間違いなく最も効率的な方法を使用したいと考えています。どちらがより効率的ですか? より良い方法はありますか?ファイル名のデータ構造を配列から別のタイプに変更することは、改善につながる場合に可能です。

4

1 に答える 1

0

私は 2 番目の方法である への一連の呼び出しを使用しFile.Exists、それを並列化して実行します。ではスループット コストは低くなりますが、レイテンシ コストは高くなりFile.Existsます。そのため、速度のためには非同期にする必要があります。

開始する基本的な考え方:

var fileExists = myFilePaths
    .AsParallel()
    .ToDictionary(path => path, path => File.Exists(path));

(もちろん、最初の方法を試して速度を比較することは完全に合理的です。私は、2 番目の方法について「最善の推測」とコメントを示しているだけです。)

于 2013-05-08T16:50:45.817 に答える