1

指定されたパスからすべてのファイル (約 3000 ファイル、サイズは 50 GB) を一度に 4k バイトで読み取ります。以下は同じコードです。私の質問は、タスクマネージャーでアプリケーションのCPUとメモリを見ると、IO読み取りが徐々に高レベルに増加していることがわかります.4k読み取りが原因である可能性があることは理解できますが、それは他のものやそのIO Read を増やします。また、FileStream はファイル全体をメモリにロードしないため、ファイルを読み取る最適な方法ですか?

fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)

do
{
   BytesRead = fileStream.Read(Buffer, 0, MAX_BUFFER);
}
while (BytesRead != 0);

fileStream.Close();
4

1 に答える 1

1

この問題に関するHans Passantの回答を確認してください。非常に明確です。

ファイルはファイル システム キャッシュによって既にバッファリングされています。必要なのは、FileStream がネイティブ Windows ReadFile() API 呼び出しを行ってバッファを頻繁に埋めないようにするバッファ サイズを選択することだけです。1 キロバイト未満にしないでください。16 KB を超えるとメモリが無駄になります。

こちらの投稿もご覧ください。ベンチマーク コードが記載されています。

于 2013-04-16T07:42:56.070 に答える