Каков наилучший размер буфера при использовании BinaryReader для чтения больших файлов (> 1 ГБ)?
m чтение двоичных файлов и вот пример:
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16*1024];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
......
}
}
Очевидно, что размер буфера (16 * 1024) играет большую роль в производительности. Я'читал, что это зависит от технологии ввода / вывода (SATA,SSD,SCSIи т. д.), а также размер фрагмента раздела, файл которого существует на нем (мы можем определить при форматировании раздела).
Но вот вопрос:Есть ли формула или лучшие практики для определения размера буфера? Прямо сейчас ям на основе метода проб и ошибок.
Редактировать: яя протестировал приложение на моем сервере с разными размерами буфера, и я получил лучшую производительность с 4095 * 256 * 16 (16MB) !!! 4096 на 4 секунды медленнее.
Вот некоторые старые посты, которые очень полезны, но я могудо сих пор не понимаю причину:
Более быстрый (небезопасный) BinaryReader в .NET
Оптимальный размер файла буфера чтения?
Файловый ввод / вывод с потоками - лучший размер буфера памяти
Как вы определяете идеальный размер буфера при использовании FileInputStream?