none
mesurer le temps d'exécution d'un traitement RRS feed

  • Question

  • Bonjour,

    Je voulais mesurer le temps d'exécution d'une partie donnée de mon programme C sous Visual Studio 2008.
    - C'est quoi le temps d'exécution ?
    - Quelle fonction de temps à utiliser pour nous donner un temps précis ?

    Merci.
    vendredi 20 novembre 2009 08:36

Toutes les réponses

  • Le moyen le plus simple que j'utilise pour mesurer le temps d'exécution en millisecondes d'une partie de code donnée est :

    DWORD dwCount = GetTickCount();
    ... code à mesurer ...
    DWORD dwDuree = GetTickCount() - dwCount;

    Avantage : ça fonctionne en Debug et en Release. Dans les deux cas, les temps sont généralement différents.

    Il existe aussi des outils de profilage de code, pour avoir une vision plus globale des parties du code d'un programme qui consomment le plus de temps.
    vendredi 20 novembre 2009 14:43
    Auteur de réponse
  • Bonjour,

    - Comment on transforme le temps obtenu en secondes ?

    - Est ce que 'GetTickCount()' est meilleure que 'clock()' ?

    - C'est quoi ces outils de profilage de code ?

    Merci.
    vendredi 20 novembre 2009 23:24
  • Bonjour !

    Eh bien d'après mes souvenirs de cours de physique, on transforme des millisecondes en secondes en divisant par 1000 ;-)

    Je ne sais pas si GetTickCount est meilleure que clock(). Ces deux fonctions sont similaires, la première est une fonction Windows, la seconde fait partie du runtime C. La deuxième appelle peut-être la première ?

    Les outils de profilage de code, c'est un vaste sujet ! Il y en a un dans Visual Studio Team System pour le code managed, mais pas natif :( A moins que quelqu'un me dise comment le faire fonctionner avec du code natif ?

    Il y a un article sur developpez.com : http://matthieu-brucher.developpez.com/tutoriels/cpp/profil-valgrind-visual-studio/
    Une recherche sur bing.com de "visual studio profilage code" donne de bons résultats également.

    (Vous avez vu ? Le LHC du CERN est reparti après un an d'arrêt !!! www.cern.ch ou en français : http://public.web.cern.ch/public/Welcome-fr.html)

    samedi 21 novembre 2009 13:19
    Auteur de réponse
  • Bonjour,

    A partir de la version Developpeur de Visual Studio, le produit dispose d'un profiler, qui permet
    de réaliser cette opération facilement.

    Référence:
    http://blogs.msdn.com/profiler/

    Il est aussi possible d'utiliser la pseudo-variables $clk.
    Elle peut être utilisée comme un timer rudimentaire

    Cette variable permet d’afficher le temps d’exécution entre deux points, mais il inclue l’overhead du debugger.
    Afin de ne pas avoir le temps d’exécution du debugger, il est possible de positionner cette variable à 0 lorsque l’on désire commencer à mesurer un temps d’exécution, puis d’afficher cette variable
    en utilisant un formatage de type “$CLK/1000,d afin d’afficher la valeur en milliseconde.

    -Gilles


    gilles
    mardi 8 décembre 2009 03:56
  • Hello !

    Je crois que le profiler de Visual Studio ne fonctionne qu'avec du code managed, et pas avec du code natif ?

    Pierre
    jeudi 10 décembre 2009 12:08
    Auteur de réponse
  • Bonjour,

    Le profiler de Visual Studio fonctione en code natif et managé.

    -Gilles
    gilles
    vendredi 18 décembre 2009 08:11