2008-12-02 10 views

Répondre

6

Vous avez besoin d'un profiler.

L'édition Visual Studio Team comprend un profileur (ce que vous recherchez) mais vous pouvez uniquement accéder aux éditions Professional ou Express. Jetez un oeil à ces discussions pour des alternatives:

What's your favorite profiling tool (for C++) What are some good profilers for native C++ on Windows?

Vous devriez vraiment pas optimiser toutes les parties de votre application jusqu'à ce que vous avez mesuré combien de temps ils prennent à courir. Sinon, vous pourriez diriger l'effort au mauvais endroit, et vous pourriez aggraver les choses, pas mieux.

1

J'ai utilisé un profileur appelé "AQ Time" qui donne tous les détails que vous voulez savoir sur les performances de votre code. Ce n'est pas gratuit si ..

0

Alors maintenant que vous savez que vous avez besoin d'un profileur, vous n'avez peut-être pas le Visual Studio, alors Very Sleepy peut être utile.

1

Vous pourriez obtenir un histogramme du compteur de programme, mais il est pratiquement inutile, sauf si vous faites quelque chose de stupide comme passer du temps dans une bulle sorte d'un grand nombre d'ints ou de doubles.

Si vous faites quelque chose d'aussi simple qu'un tri à bulles d'un tableau de chaînes, l'histogramme PC vous indiquera seulement que vous avez un hotspot dans la routine de comparaison de chaînes. Ce n'est pas beaucoup d'aide, n'est-ce pas?

Je sais que vous ne feriez pas une telle sorte de bulle, mais juste pour le fun, supposons que vous l'avez fait, et cela prenait 90% de votre temps. (c'est-à-dire, si vous l'avez corrigé, cela pourrait aller jusqu'à 10 fois plus vite.)

C'est en fait une chose très facile à trouver, car si vous appuyez simplement sur le bouton de pause dans le débogueur, vous verrez presque certainement qu'il s'arrête dans la routine de comparaison de chaînes. Ensuite, si vous regardez la pile d'un niveau, vous regarderez directement la boucle de tri des bulles qui est votre bug. Si vous n'êtes pas sûr d'avoir vraiment détecté le problème, arrêtez-le plusieurs fois. Le nombre de fois que vous voyez le problème vous indique combien c'est coûteux.

Toute ligne de code qui apparaît sur la pile d'appels sur plusieurs pauses, est quelque chose qui vous supplie de le réparer. Certains vous ne pouvez pas, comme "appeler _main", mais si vous le pouvez vous obtiendrez une bonne accélération, garanti.

Then do it again, and again.

Lorsque vous manquez de choses que vous pouvez résoudre, alors vous avez vraiment ajusté le programme de l'intérieur d'un pouce de sa vie.

C'est aussi simple que cela.


Vous pouvez également utiliser le profileur dans Visual Studio.Il est un bel outil, mais être conscient de ces lacunes:

  • vous Confondre « temps exclusif », qui, si vous vous concentrez sur des informations de niveau ligne, est presque vide de sens. Si votre programme perd du temps à faire des E/S, il ne le verra pas, car lorsqu'il s'arrête pour faire des E/S, les échantillons s'arrêtent, sauf si vous utilisez des instruments. Mais si vous utilisez l'instrumentation, vous n'obtiendrez pas d'informations au niveau de la ligne, seulement au niveau de la fonction. C'est OK si vos fonctions sont toutes petites.

  • Vous confondre avec "l'arbre d'appel". Ce qui compte pour une ligne de code, c'est le nombre d'échantillons de la pile. Si c'est dans de nombreuses branches de l'arbre d'appel, l'arbre d'appel ne vous montrera pas ce qu'il en coûte vraiment. Si elle vous indique qu'une ligne est coûteuse, elle ne peut pas vous dire pourquoi. Pour cela, vous voulez voir autant d'informations d'état sur chaque échantillon que vous avez besoin, plutôt que de simples résumés.

  • Il est difficile de le dire quand vous voulez faire des échantillons, et quand ce n'est pas le cas. Vous voulez qu'il échantillonne lorsque vous attendez l'application, pas quand il vous attend.