Je pense que chaque fois que l'on traite un fichier en read-only, on devrait utiliser mmap. Cela laisse carte blanche à l'OS quant à la manière dont il va gérer le chargement. Le mappage d'un fichier en mémoire s'appuie sur la gestion de la mémoire virtuelle, à ceci près que les données sont directement lues ou écrites dans le fichier concerné plutôt que dans un fichier ou une partition de swap.
C'est vraiment ce qu'il y a de plus rapide et de plus simple à la fois.
En revanche, pour utiliser mmap, il faut forcément que:
Le fichier soit un fichier régulier et de taille définie (on ne s'imaginerait pas mapper en mémoire un truc comme /dev/zero par exemple);
Dé préférence, avoir le fichier sur un filesystem local, sinon tout le gain en performance est grêvé par les accès réseau, dont on ne peut d'ailleurs plus prévoir quand ils auront lieu. Et même sans cela, en local, le système peut faire des optimisations et aller lire directement les secteurs du disque. Sur d'autres filesystem, la fonction doit quand même passer par des appels fichiers standard.
Ceci dit, ces deux conditions sont remplies 90% du temps. De plus, quand on travaille sur des fichiers de plusieurs Gigas, cela permet au système de savoir exactement ce que tu comptes faire et de s'organiser en conséquence. Si tu travailles sur une machine multi-utilisateurs, tes collègues t'en seront reconnaissants.
[^] # Re: faire du grep plus rapidement!
Posté par Obsidian . En réponse au message [Terminal] faire du grep plus rapidement!. Évalué à 1.
C'est vraiment ce qu'il y a de plus rapide et de plus simple à la fois.
En revanche, pour utiliser mmap, il faut forcément que:
Ceci dit, ces deux conditions sont remplies 90% du temps. De plus, quand on travaille sur des fichiers de plusieurs Gigas, cela permet au système de savoir exactement ce que tu comptes faire et de s'organiser en conséquence. Si tu travailles sur une machine multi-utilisateurs, tes collègues t'en seront reconnaissants.