2013-08-13 2 views
2

У меня есть этот простой код, который сочетает в себе текстовые файлы в один текстовый файл:Определение размера буфера при работе с файлами в C#?

void Main() 
{ 
const int chunkSize = 2 * 1024; // 2KB 
var inputFiles = new[] { @"c:\1.txt", @"c:\2.txt", @"c:\3.txt" }; 
using (var output = File.Create(@"c:\output.dat")) 
{ 
    foreach (var file in inputFiles) 
    { 
     using (var input = File.OpenRead(file)) 
     { 
      var buffer = new byte[chunkSize]; 
      int bytesRead; 
      while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       output.Write(buffer, 0, bytesRead); 
      } 
     } 
    } 
} 
} 

Мой вопрос касается chunkSize размера.

Как я могу узнать, правильный ли номер, который я выбрал? (1024 * 2)

Я пытаюсь найти формулу холостого хода:

Предполагая, что размер каждого файла F mb, и у меня есть R mb Рамы и размер блока моей Hd является B kb - есть ли формула который я могу построить, чтобы найти размер простаивающего буфера?

+0

Там не может быть любая такая формула, так как даже «размер блока HD» является «виртуализированных» в эти дни ... на вершине приходит, что есть различия (иногда большие) между версиями ОС/выпусками. Если вы хотите получить максимальную производительность, вы должны проверить MMF (Memory Mapped Files), который был доступен в Windows в течение длительного времени и теперь является частью .NET (V 4.0 и выше). – Yahia

+0

Что вы пытаетесь достичь путем настройки размера буфера? –

+1

Существует также буферизация ввода-вывода ОС, поэтому вы можете сделать 1 байт в момент времени и получить работоспособную производительность (не делайте этого). Лучше всего сравнить его с некоторыми разными номерами (512, 1k, 2k, 4k и т. Д.) И посмотреть, какой из них самый быстрый. – Ibasa

ответ

Смежные вопросы