Какой размер буфера выбрать для чтения / записи файлов с помощью функций POSIX fread / fwrite?
grep
, cp
)
read
/ write
функции или ANSI / ISO / IEC fread
/ fwrite
функции?
Какой размер буфера выбрать для чтения / записи файлов с помощью функций POSIX fread / fwrite?
grep
, cp
)
read
/ write
функции или ANSI / ISO / IEC fread
/ fwrite
функции?
Ответы:
Функции ANSI / ISO fread/fwrite
буферизируются. Размер буфера обычно составляет 8 КиБ, и это дает степень детализации независимо от того, что вы используете в своем коде. Возможно, имеет смысл немного увеличить буфер, возможно, до значения ниже. Для массовой передачи они всегда будут немного медленнее, хотя из-за дополнительных копий.
Для read/write
функций POSIX это зависит от операционной системы и устройства, а также от многих других вещей, но практический опыт показывает, что вы не получите никакого улучшения производительности за счет увеличения буфера выше десятков КиБ, поэтому 32 или 64 КиБ - это то, что нужно.
В некоторых системах зависимость больше, чем в других. В Linux разница обычно минимальна выше 8 КиБ (поэтому буфер по умолчанию подходит), например, в Windows CE (с использованием собственного API; у них нет POSIX), даже больше, чем 64 КиБ, все еще помогают. Это также может зависеть от устройства.
fread
, fwrite
) и 32 / 64К для небуферизован? Если при отправке данных изображения есть какое-либо конкретное обоснование, чтобы выбрать буферизованный или небуферизованный?