¿Qué tamaño de búfer debo elegir para leer / escribir archivos a través de las funciones POSIX fread / fwrite?
grep
, cp
)
read
/ write
funciones o ANSI / ISO / IEC fread
/ fwrite
funciones?
¿Qué tamaño de búfer debo elegir para leer / escribir archivos a través de las funciones POSIX fread / fwrite?
grep
, cp
)
read
/ write
funciones o ANSI / ISO / IEC fread
/ fwrite
funciones?
Respuestas:
Las fread/fwrite
funciones ANSI / ISO están almacenadas en búfer. El búfer suele ser de 8 KiB y eso le da una granularidad independiente de lo que usa en su código. Puede tener sentido aumentar un poco el búfer, tal vez al valor a continuación. Sin embargo, para la transferencia masiva siempre serán un poco más lentos debido a las copias adicionales.
Para las read/write
funciones POSIX , depende del sistema operativo y del dispositivo y de muchas otras cosas, pero la experiencia práctica es que no se mejora el rendimiento al aumentar el búfer más allá de las decenas de KiB, por lo que 32 o 64 KiB es lo correcto.
En algunos sistemas, la dependencia es mayor que en otros. En Linux, la diferencia suele ser mínima por encima de 8 KiB (por lo que el búfer predeterminado está bien), por ejemplo, en Windows CE (usando API nativa; no tienen POSIX) incluso más grande que 64 KiB todavía ayuda. También puede depender del dispositivo.
fread
, fwrite
) y 32 / 64K para sin búfer? Si se envían datos de imágenes, ¿hay alguna razón específica para elegir con o sin búfer?