Taille de tampon optimale pour fread / fwrite [fermé]

10

Quelle taille de tampon dois-je choisir pour les fichiers en lecture / écriture via les fonctions POSIX fread / fwrite?


la source
Cette question est trop localisée. Cela ne concerne que le programme particulier que vous codez en ce moment.
World Engineer
Je veux dire le cas général. De nombreux programmes doivent lire / écrire des fichiers entiers de taille très inconnue (comme grep, cp)
Voulez-vous dire POSIX read/ writefonctions ou ANSI / ISO / CEI fread/ fwritefonctions?
Jan Hudec

Réponses:

6

Les fonctions ANSI / ISO fread/fwritesont tamponnées. Le tampon est généralement de 8 Ko et cela donne une granularité indépendante de ce que vous utilisez dans votre code. Il peut être judicieux d'augmenter un peu le tampon, peut-être jusqu'à la valeur ci-dessous. Pour le transfert en vrac, ils seront toujours un peu plus lents, en raison des copies supplémentaires.

Pour les read/writefonctions POSIX , cela dépend du système d'exploitation et du périphérique et de beaucoup d'autres choses, mais l'expérience pratique est que vous n'obtenez aucune amélioration des performances en augmentant le tampon au-delà de dizaines de KiB, donc 32 ou 64 KiB sont à peu près corrects.

Sur certains systèmes, la dépendance est plus importante que sur d'autres. Sur Linux, la différence est généralement minime au-dessus de 8 Ko (donc le tampon par défaut est bien), par exemple sur Windows CE (en utilisant l'API native; ils n'ont pas POSIX), même plus grand que 64 Ko sont toujours utiles. Cela peut également dépendre de l'appareil.

Jan Hudec
la source
donc 8k pour les E / S tamponnées (c'est fread-à- dire fwrite) et 32 ​​/ 64K pour les tampons non tamponnés? Si l'envoi de données d'image existe-t-il une justification particulière pour choisir la mise en mémoire tampon ou non en mémoire tampon?
Francesco Boi
1
@FrancescoBoi, 8k est uniquement par défaut pour les tampons que vous pouvez modifier. Le but de la mise en mémoire tampon est d'éviter tous les changements de contexte lorsque vous traitez quelques octets à la fois. Pour l'image dont vous avez généralement besoin ou que vous avez tout, puis sans tampon est préférable car elle saute un peu de traitement.
Jan Hudec