У меня есть этот простой код, который сочетает в себе текстовые файлы в один текстовый файл:Определение размера буфера при работе с файлами в 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
- есть ли формула который я могу построить, чтобы найти размер простаивающего буфера?
Там не может быть любая такая формула, так как даже «размер блока HD» является «виртуализированных» в эти дни ... на вершине приходит, что есть различия (иногда большие) между версиями ОС/выпусками. Если вы хотите получить максимальную производительность, вы должны проверить MMF (Memory Mapped Files), который был доступен в Windows в течение длительного времени и теперь является частью .NET (V 4.0 и выше). – Yahia
Что вы пытаетесь достичь путем настройки размера буфера? –
Существует также буферизация ввода-вывода ОС, поэтому вы можете сделать 1 байт в момент времени и получить работоспособную производительность (не делайте этого). Лучше всего сравнить его с некоторыми разными номерами (512, 1k, 2k, 4k и т. Д.) И посмотреть, какой из них самый быстрый. – Ibasa