J'ai une application qui est écrite en C++, Visual Studio 2005 fonctionnant exclusivement sous Windows XP. Lorsque l'application est lancée, elle lit un grand nombre (> 20000) de fichiers texte (.nfo) contenant du code XML. Chaque fichier contient 800 octets. Lorsque l'application est lancée après un redémarrage à froid, il faut 10 minutes pour lire les fichiers. Cependant, si je le ferme et le relance, cela ne prend que 10 secondes pour les lire. Si je fais un redémarrage à chaud, cela prend également 10 secondes. Si j'efface le cache à l'aide de l'utilitaire cacheset, la lecture des fichiers prend également 10 secondes. Si je fais un redémarrage à froid de l'ordinateur, ne touchez pas l'ordinateur pendant 2 heures, lancez l'application, il faut encore 10 minutes pour lancer.Windows XP plus lent à lire les fichiers texte au démarrage en C++; prefetch?
J'utilise la fonction de base de la bibliothèque standard (std) pour ouvrir/lire/fermer les fichiers.
Je crois que le problème ne vient pas directement de l'implémentation de l'application mais de Windows XP.
Mon accent actuel est donné au Préfiltre de Windows XP. Mon application a un fichier .pf situé dans le répertoire prefetch. Toutefois, aucun fichier texte .nfo ne se trouve dans la liste du fichier à pré-charger. Par exemple, dans le fichier prefetch associé à Internet Explorer, vous pouvez voir que ses fichiers temporaires tels que les images sont répertoriés dans le fichier prefetch. Je crois que si je pouvais forcer mon fichier à apparaître dans cette liste; les opérations d'ouverture/de lecture sur eux seraient plus rapides que Windows sait déjà où ils sont localisés sur le disque.
Pourquoi mes fichiers ne se trouvent-ils pas dans le fichier prefetch .pf avec ma DLL? Quelle est la condition pour qu'un fichier apparaisse dans un fichier prefetch?
Est-ce que cela a du sens?
Je me demandais aussi s'il existait un moyen de forcer Windows XP à pré-extraire un répertoire complet ou une liste de fichiers?
Ceci est un produit déjà commercialisé vendu avec un ordinateur. Par conséquent, nous avons un accès complet pour modifier le système d'exploitation. Cependant, nous n'avons pas l'intention de faire une altération extrême de notre application.
Cordialement
Comment l'application est lancée? L'exécutez-vous manuellement ou fait-il partie du groupe de démarrage, du registre ou de tout autre élément? Je ne suis pas sûr de la version du système d'exploitation, mais certains programmes de démarrage "Sandbox" pour aider au démarrage parce que beaucoup de fournisseurs veulent que leurs programmes démarrent en même temps. –
Habituellement, l'utilisateur démarre manuellement l'application! Nous travaillons sur le lancement automatique mais je ne vois pas comment cela pourrait aider .. – philouuuu
Par la fonction de base de std vous voulez dire les objets ifstream? Les fonctions en langage C sont supposées avoir de bien meilleures performances lors du traitement d'une grande quantité de texte. – Raven