単一バイト配列からディスクに 1GB ファイルを書き込むのにかかる時間と、1024 個の配列 (それぞれ 1MB) から別の 1GB ファイルを書き込むのにかかる時間に違いがあるかどうかを確認するテストを行いました。
多くの配列のテスト書き込み
331.6902 ミリ秒
大きな配列のテスト書き込み
14756.7559 ミリ秒
このテストでは、「多くの配列」は実際にはbyte[1024 * 1024]
、for ループを使用して 1024 回書き込む単一の配列です。「大きな配列」は、ランダムな値で満たされた 1GB のバイト配列です。
コードは次のようになります。
Console.WriteLine("Test Writing many arrays");
byte[] data = new byte[1048576];
for (int i = 0; i < 1048576; i++)
data[i] = (byte)(i % 255);
FileStream file = new FileStream("test.txt", FileMode.Create);
sw1.Restart();
for (int i = 0; i < 1024; i++ )
file.Write(data, 0, 1048576);
file.Close();
sw1.Stop();
s1 = sw1.Elapsed;
Console.WriteLine(s1.TotalMilliseconds);
Console.WriteLine("Test Writing big array");
byte[] data2 = new byte[1073741824];
for (int i = 0; i < 1073741824; i++)
data2[i] = (byte)(i % 255);
FileStream file2 = new FileStream("test2.txt", FileMode.Create);
sw1.Restart();
file2.Write(data2, 0, 1073741824);
file2.Close();
sw1.Stop();
s1 = sw1.Elapsed;
Console.WriteLine(s1.TotalMilliseconds);
メソッドを呼び出してストリームをディスクに書き込むfile.Close()
ため、時限部分の中に を含めました。Flush()
結果のファイルはまったく同じサイズです。
C# は、私が常に同じ配列を使用していることを認識し、反復/書き込みプロセスを最適化する可能性があると考えましたが、結果は 2 ~ 3 倍ではなく、約 45 倍高速です...なぜですか?