1

年と月に分割されたサブフォルダーに 200 万個のファイルが分散されています。私は以下を使用してファイルをループしています:

foreach (string file in Directory.EnumerateFiles(data_path, "*.*", SearchOption.AllDirectories))

ネストされたコンストラクトを使用して列挙セットを分割することを期待する必要があります:

foreach (string year_folder in Directory.EnumerateDirectories(data_path))
    foreach (string month_folder in Directory.EnumerateDirectories(year_folder))
        foreach (string file in Directory.EnumerateFiles(month_folder))

よりメモリ効率が良いでしょうか?

以下の私のコメントもご覧ください。

4

1 に答える 1

1

あなたのは少し小さいです

提案されたソリューションは、ちょうど 3 つの入れ子レベルがあり、最初の 2 つはディレクトリのみであり、最後の 1 つにはファイルのみが含まれているという事実をハードコーディングできるという理由だけで、メモリ効率がわずかに向上します。

彼らのものはもう少し一般的です

一方、Directory.EnumerateFiles()任意のディレクトリのネストを使用した一般的なケースのソリューションを実装する必要があります (これには、列挙内の場所を追跡するための独自の内部スタックが含まれます)。

どちらでも問題ありません。ここにトレードオフがあります

実装によって、コードが現在の特定のディレクトリ構造にバインドされます。foreachループを一瞥して、ディスク上で期待されるフォルダー構造を視覚化できるのが好きです。

一方で、あなたやあなたのチームの誰かがディレクトリ レイアウトを変更したい場合、これは面倒です。それを変更する可能性が非常に低いか、ディレクトリ構造を変更た場合にコードを更新するのに十分単純な場合は、あなたのアプローチを使用しても安全だと思われます。

于 2012-04-09T01:32:14.650 に答える