Qual tamanho de buffer devo escolher para arquivos de leitura / gravação através das funções fread / fwrite do POSIX?
grep
, cp
)
read
/ write
funções ou ANSI / ISO / IEC fread
/ fwrite
funções?
Qual tamanho de buffer devo escolher para arquivos de leitura / gravação através das funções fread / fwrite do POSIX?
grep
, cp
)
read
/ write
funções ou ANSI / ISO / IEC fread
/ fwrite
funções?
Respostas:
As fread/fwrite
funções ANSI / ISO são armazenadas em buffer. O buffer geralmente tem 8 KiB e isso fornece a granularidade independentemente do que você usa no seu código. Pode fazer sentido aumentar um pouco o buffer, talvez para o valor abaixo. Para transferência em massa, eles sempre serão um pouco mais lentos, devido às cópias extras.
Para as read/write
funções do POSIX , depende do sistema operacional e do dispositivo e muitas outras coisas, mas a experiência prática é que você não obtém nenhuma melhoria de desempenho aumentando o buffer além de dezenas de KiB; portanto, 32 ou 64 KiB estão certos.
Em alguns sistemas, a dependência é maior que em outros. No Linux, a diferença geralmente é mínima acima de 8 KiB (portanto, o buffer padrão é bom), por exemplo, no Windows CE (usando API nativa; eles não têm POSIX) ainda maiores que 64 KiB ainda ajudam. Também pode depender do dispositivo.
fread
, fwrite
) e 32 / 64K para sem buffer? Se o envio de dados de imagem existe algum argumento específico para escolher buffer ou buffer?