Quale dimensione del buffer dovrei scegliere per i file di lettura / scrittura tramite le funzioni POSIX fread / fwrite?
grep
, cp
)
read
/ write
funzioni o ANSI / ISO / IEC fread
/ fwrite
funzioni?
Quale dimensione del buffer dovrei scegliere per i file di lettura / scrittura tramite le funzioni POSIX fread / fwrite?
grep
, cp
)
read
/ write
funzioni o ANSI / ISO / IEC fread
/ fwrite
funzioni?
Risposte:
Le fread/fwrite
funzioni ANSI / ISO sono memorizzate nel buffer. Il buffer è di solito 8 KiB e ciò fornisce la granularità indipendente da ciò che si utilizza nel codice. Potrebbe avere senso aumentare un po 'il buffer, forse al valore seguente. Per il trasferimento di massa saranno sempre leggermente più lenti a causa delle copie extra.
Per le read/write
funzioni POSIX dipende dal sistema operativo e dal dispositivo e molte altre cose, ma l'esperienza pratica è che non si ottiene alcun miglioramento delle prestazioni aumentando il buffer oltre decine di KiB, quindi 32 o 64 KiB sono giusti.
In alcuni sistemi la dipendenza è maggiore rispetto ad altri. Su Linux la differenza di solito è minima al di sopra di 8 KiB (quindi il buffer predefinito va bene), ad esempio su Windows CE (usando l'API nativa; non hanno POSIX) anche più grandi di 64 KiB aiutano ancora. Potrebbe anche dipendere dal dispositivo.
fread
. fwrite
) e 32 / 64K per senza buffer? Se l'invio di dati di immagine esiste una logica specifica da scegliere nel buffer o nel buffer?