Размер буфера FileStream

273
01 мая 2017, 00:06

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

new FileStream("Test#@@#.dat", FileMode.Create, 
        FileAccess.ReadWrite, FileShare.None, 4096, true);

Здесь он размером 4096.

Answer 1

FileStream внутри себя использует буфер. Если вы просите прочитать один байт, он реально читает полный буфер, и возвращает только один байт. В следующий раз когда вы просите снова один байт, он не читает, а возвращает следующий байт из буфера. Размер этого буфера и задаётся в конструкторе.

А вот при каких обстоятельствах какой нужен размер буфера, это сложный вопрос, и зависит от очень многих факторов. Например, от того, собираетесь ли вы читать весь файл, или только его небольшую часть. От того, какой размер блока файловой системы. от того, сколько файлов вы собираетесь одновременно открывать и. т. д. Хорошего, общего решения наверное нет.

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

READ ALSO
События контролов в ASP.NET

События контролов в ASP.NET

Проблема в том, что событие Click не срабатывает (даже в назначенный метод не заходит)Метод Redirect формирует POST запрос и выполняет перенаправление...

242
Проброс событий C#

Проброс событий C#

Есть некоторый класс Controller, который является входной точкой в приложение и реализует интерфейс IController с набором методов, доступных извне...

321
Реакция на данные в БД.

Реакция на данные в БД.

Привет всем, у меня недавно возникла ситуацияЗаключается она в том что нужно оправлять письма пользователям, например за 5 дней до их дня...

194
Добавляет ли метод First или Last в классе List в сам список?

Добавляет ли метод First или Last в классе List в сам список?

EnumerableFirst - берет первый first элемент из коллекции, если коллекция пуста - падает эксепшн

241