2010-02-01 7 views
3

J'ai une application écrite en C++ en utilisant Visual Studio 2005. L'application présente certains problèmes de performances. Je voudrais explorer où. Je dois explorer dans quelles classes/méthodes/lignes l'application passe la plupart du temps. Cela peut-il être fait avec le WPA? Si oui, pouvez-vous, s'il vous plaît, me donner un pointeur vers la documentation?Utilisation de l'outil Windows Performance Analysis en tant que profileur

Répondre

4

Non, WPT exploite les événements Windows, cela vous aiderait seulement à diagnostiquer un problème lorsque Windows est la cause de votre ralentissement. Vous n'obtiendrez certainement aucun diagnostic pour votre code. Ce dont vous avez besoin est un vrai profileur. Les bons coûtent de l'argent. Vérifiez this thread pour plus de conseils.

+0

Merci. J'étais désespéré d'essayer de forcer WPT à lire mes tables de symboles. – danatel

0

Essayez le YourKit .net profiler. J'ai essayé ceci et quelques autres récemment, mais c'était le seul que j'ai réussi à travailler avec mon projet C++/CLI (avec un mélange de code managé et non managé).

[Éditer] Oups; J'ai lu WPA comme WPF et supposé que vous vouliez profiler un certain code .net.

3

Le moyen le plus simple pour savoir ce qui est inutile est le stackshots, que vous pouvez facilement obtenir avec le bouton "pause" dans Visual Studio.

Vous n'avez pas besoin de mesurer; tout ce que vous avez à faire est de le prendre en flagrant délit. Si vous trouvez que vous faites quelque chose sur deux ou plusieurs photos, et que c'est quelque chose que vous pourriez éviter de faire, vous gagnerez beaucoup de temps. Et, vous pouvez répéter le processus, car les problèmes qui sont petits au premier abord vont "augmenter" lorsque vous supprimez d'autres problèmes.

+0

Bon conseil mais inadapté à ma situation. L'application fonctionne bien sur Windows (99% du temps d'attente pour l'entrée de l'utilisateur), les problèmes de performance sont visibles uniquement sur un système embarqué avec un processeur beaucoup plus lent et pour lequel je n'ai aucun débogueur/profileur. Bon profileur pourrait aider car il peut distinguer entre 0,5% et 0,05% du temps. – danatel

+0

Ce que je fais dans ce cas est d'enrouler une boucle (10x ou 100x) autour de chaque traitement piloté par l'interface utilisateur, de manière à "amplifier" ce qui se passe. Cela a le même effet que de ralentir le processeur. Réglez le code sur le temps minimum, puis retirez la boucle. –

Questions connexes