2010-02-12 2 views
2

J'ai un problème très étrange. Je cours une boucle dans un thread détaché, et quelques lignes de code dans ma boucle (différentes lignes dans chaque itération de la boucle) prennent beaucoup de temps (~ 45 secondes) pour s'exécuter, même s'il s'agit de commandes simples comme initialisation d'un document NSXMLDocument avec des données. Ce problème est également très incohérent, et il ne se produit pas au même endroit ou à chaque fois. Des idées pour lesquelles cela se passe?Pourquoi certaines lignes de mon application Cocoa prennent-elles une éternité à s'exécuter?

PS. Comme mon code est si long et complexe, et que le problème n'est pas constant, je ne peux pas publier d'exemple de code:/

+0

Peut-être que vous devriez refactoriser votre code pour supprimer la complexité et le problème deviendra apparent ou se corrigera dans le nettoyage. –

+0

Compte tenu de la taille du document XML chargé, même une simple 'commande' peut prendre beaucoup de temps à s'exécuter, car derrière tous ces noms de classe fantaisistes, il y a beaucoup de travail à faire - cela prend deux fois Les données. – arul

Répondre

2

Ne croyez pas à propos des problèmes de performances. Il y a beaucoup d'outils pour vous aider à déterminer ce qui ne va pas, y compris l'CPU Sampler instrument dans l'application Instruments, et Shark. Les deux vous permettront d'analyser exactement où va le temps CPU, de sorte que vous pouvez faire quelque chose à ce sujet.

0

Ce que d'autres ont dit; vous devriez utiliser des instruments pour identifier où va le temps. En particulier, vous voudrez utiliser l'instrument de l'échantillonneur CPU et l'instrument d'activité de la mémoire virtuelle. D'après les sons de celui-ci, je parierais que votre application provoque le manque de RAM du système et le démarrage de la pagination sur le disque. Cela va complètement tuer la performance exactement comme vous le décrivez; à un moment indéterminé au cours de la course, il semble que l'application est soit très lente ou juste des pauses pendant un certain temps.

Vous devriez probablement utiliser l'instrument Object Alloc pour savoir si vous utilisez la mémoire comme prévu et, si vous en utilisez beaucoup, où vous pouvez optimiser votre utilisation de la mémoire.

Questions connexes