J'ai une application C++ fonctionnant sous Windows qui se réveille toutes les 15 minutes pour ouvrir & lire les fichiers présents dans un répertoire. Le répertoire change à chaque exécution.Optimiser le fichier ouvrir et lire
- ouverte est réalisée par ifstream.open (nom_fichier, std :: ios :: binaires)
- lecture est effectuée par streambuf ios :: rdbuf() *
- Nombre total de fichiers toutes les 15 minutes est d'environ 50 000
- Les fichiers sont ouverts & lu par lots de 20
- La taille de chaque fichier est d'environ 50 kilo-octets
Pour chaque série; cette opération (ouverte & read) prend environ 18-23 minutes sur une machine dual-core avec une vitesse de broche de 6000 tr/min. J'ai capturé le défaut de la page de mémoire/sec et ils sont dans la gamme de 8000 - 10000.
Y at-il un moyen de réduire les défauts de page et optimiser le fichier ouvert & opération de lecture?
Gowtham
Vous ne dites pas comment vous lisez depuis le rdbuf. Sauf si vous lisez le fichier entier en un seul appel, essayez de définir le tampon dans rdbuf à la taille du fichier. C'est un changement de code très simple, ça vaut l'expérience, et ça peut aider beaucoup. Si le code lit actuellement 20 fichiers à la fois en petits morceaux de quelques kb, alors le disque pourrait faire jusqu'à une recherche par morceau. Donc tampon plus gros => plus gros morceaux => moins de recherche => plus vite. Espérons. Bien sûr, cela peut ne faire aucune différence puisque Windows risque de mettre en cache le fichier entier de manière spéculative. –