2012-02-17 1 views
2

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

+0

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. –

+0

Habituellement, l'utilisateur démarre manuellement l'application! Nous travaillons sur le lancement automatique mais je ne vois pas comment cela pourrait aider .. – philouuuu

+0

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

Répondre

4

OMI, si vous lisez> 20000 fichiers au démarrage, c'est certainement un problème avec l'application. Pourquoi quelqu'un préfèrerait peaufiner le système d'exploitation pour réparer réellement leur application est au-delà de moi.

Si cela prend 10 minutes pour> 20000 fichiers, vous cherchez à < 30 ms par fichier, qui n'est pas que mal pour un disque rotatif, en particulier si vous utilisez les routines de fichiers standard C++, qui ont un peu de frais généraux, IIRC.

Lorsque cela prend 10 secondes (0,5 ms par fichier), c'est parce que les fichiers se trouvent déjà dans le cache disque du système.

Même si vous l'avez fait fonctionner, la préextraction ne rend pas les choses plus rapides par magie; le système d'exploitation devrait toujours chercher, ouvrir, lire et fermer plus de 20000 fichiers, dont prendront en l'ordre de quelques minutes.La meilleure façon d'améliorer votre temps de chargement est de regrouper les fichiers et de les lire tous en même temps.
Pour une efficacité maximale, collez-les dans une archive compressée.
Ou utilisez des disques SSD.

Questions connexes