@Smiz001
C#-developer

Какой оптимальный размер буфера?

Доброе время суток. Имеются ли какие-нибудь статьи по выбору оптимального размера буфера для считывания файла и запись в файл?
В интернете только натыкался на вот эту статью 2004 года, где рекомендуется применять 4 кб или 64 кб, но т.к. прошло уже 13 лет и мощности компов стали больше то уже доверия таким статьям мало. На стеке люди тоже пишут что мол 4 кб лучше использовать.
Просто у меня работа будет чаще всего с файлами более 10 гб и 4кб для них брать это как-то несерьезно (долгая работа с файлом)
P.S. необходимо это для диплома.
  • Вопрос задан
  • 8249 просмотров
Решения вопроса 1
@4ainik
начинал с бейсика на 286 в 1994
ну раз это нужно для диплома, то будет вполне уместно провести анализ: ряд тестов на чтений/запись больших файлов скажем размером в 10ГБ.
Читать/писать разными блоками начиная от 512 байт, далее степень двойки (1024,2048,4096,8192,...) замеряя при этом скорость... программа простецкая, за вечер думаю управитесь... построите график зависимости производительности от размера буфера... будет шикарный раздел диплома...
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
more_cry
@more_cry
Пишу веб-проекты не до конца
На самом деле идеальный буфер от много зависит: от размера блоков вашей файловой системы, от кэша и т.д. Если обобщить, то главное не превышать область кэшей процессора, вот про регистры в таких крупных размерах речи и не идет, конечно. Так что можете смело брать ровно столько, сколько на L1 кэш влезет. Пока выше не залезете, то и не попадете в область оперативной памяти, а следовательно не уйдете вниз по кривой перформанса.

Я бы советовал батчить файл на 64кб и не проводить раннюю оптимизацию, написать сначала как есть, а потом уже заниматься такой микро-оптимизацией. Не думаю, что будет большой разлет по перфомансу.
Ответ написан
@Ivankon
Смотрел исходники Майкрософта, и там применительно к C# для копирования файлов выбран буфер 81920, объясняется это так: "Выбираем значение, которое является самым большим кратным 4096, но которое по-прежнему меньше порога кучи больших объектов (85K)." Считаю что это самый оптимальный буфер для копирования.
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
4к на данный момент все еще оптимален и универсален.
Уменьшать смысла нет как правило. Увеличение может привести как к росту производительности, так и к падению. Зависит от ситуации.
Идеальный размер существует только для конкретной ситуации.
Если ситуации могут быть разными то следует выбирать не идеальный, а оптимальный - обеспечивающий адекватную работу в большинстве ситуаций. А это как раз около 4к.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы