LANネットワーク共有上にそれぞれ0〜8kbの数十万の小さなテキストファイルがあります。とでいくつかの相互運用呼び出しを使用してkernel32.dll
、FindFileEx
各ファイルの完全修飾UNCパスのリストを再帰的にプルし、パスをメモリのなどのコレクションクラスに格納できますList<string>
。このアプローチを使用すると、List<string>
かなり迅速にデータを取り込むことができました(3分間のファイル名と比較して50kのファイル名あたり約30秒Directory.GetFiles
)。
ただし、ディレクトリをクロールしてファイルパスをにList<string>
保存したら、リストに保存されているすべてのパスをパスして、小さなテキストファイルの内容を読み取り、読み取った値に基づいてアクションを実行したいと思います。
テストベッドとして、List<string>
このLANネットワーク共有への42,945個のファイルパスを格納している各ファイルパスを繰り返し、それぞれに対して次の行を実行しましたFileFullPath
。
StreamReader file = new StreamReader(FileFullPath);
file.ReadToEnd();
file.Close();
したがって、これらの行だけで、リストに保存されている42,945個のファイルパスすべてに対して13〜15分の実行時間がかかります。
C#を介して多くの小さなテキストファイルをロードするためのより最適な方法はありますか?考慮すべき相互運用機能はありますか?それとも、これは私が期待できる最高のものですか?とても長い時間のようです。