Почему запись множества небольших байтовых массивов в файл выполняется быстрее, чем запись одного большого массива?

Я сделал тест, чтобы увидеть, есть ли разница между временем записи файла размером 1 ГБ на диск из однобайтового массива и записью другого файла размером 1 ГБ из 1024 массивов (по 1 МБ каждый ).

Test Writing many arrays
331.6902 ms
Test Writing big array
14756.7559 ms

Для этого теста «множество массивов» на самом деле представляет собой один массив byte[1024 * 1024], который я записываю 1024 раза, используя цикл for. «Большой массив» — это просто массив байтов размером 1 ГБ, заполненный случайными значениями.

Вот как выглядит код:

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 раз быстрее... Почему?

5
задан Alex Rose 11 July 2012 в 14:58
поделиться