IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Mesurer le temps d'éxécution d'une méthode


Sujet :

C++Builder

  1. #1
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut Mesurer le temps d'éxécution d'une méthode
    bonjour, je veux faire une étude de performance de mon application mais je n'arrive pas à trouver un élément qui a pour rôle le chronométrage de l'exécution d'une application. j'ai essayé avec le composant Timer mais j'ai pas trouvé de solutions
    Merci d'avance

  2. #2
    Membre régulier

    Inscrit en
    Janvier 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 38
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Voyez du coté de la fonction GetTickCount().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int t=GetTickCount();
    VotreFonction();
    t=GetTickCount()-t;
    ShowMessage("Temps d'exécution: "+IntToStr(t)+"ms");
    @+
    Sylvain

  3. #3
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    merci pour cette solution mais j'ai tj un résultat égal à 0 ms c'est très bizzard et si je fais un showmessage pour le temps de début d'éxécution, le temps de début change à chaque fois et pour la valeur de sortie à chaque fois j'ai une nouvelles valeurs . Merci de m'aider

  4. #4
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    c'est normal, la fonction GetTickCount te renvoie un entier correspondant à l'horloge, c'est comme si tu lisais l'heure, à chaque fois que tu la lis, elle est différente.
    Le problème que tu vois un temps de 0 ms est en fait une optimisation de compilation de Builder que tu ne dois pas pouvoir modifié.
    J'ai constaté ce soucis pour connaître le temps d'exécution d'une action.

    Qu'y a t il dans ta fonction ?

  5. #5
    Membre régulier

    Inscrit en
    Janvier 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 38
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Pour avoir un temps précis il est important de décocher l'option d'optimisation de vitesse (qui est cochée par défaut lorsque le programme est compilé en Release).

    Pour avoir une idée plus précise du temps moyen pris par la fonction et surtout si ce temps est très court:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int t=GetTickCount();
    for(int i(0); i<1000; i++)
    {
        VotreFonction();
    }
    float tm=GetTickCount()-t;
    ShowMessage("Temps d'exécution: "+FloatToStr(tm/1000.0)+"ms");
    @+
    Sylvain

  6. #6
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    le temps d début d'exécution change à cahque fois c'est logique. mais normalement la durée d'exécution varie très peu d'une fois à une autre.

    Ma fonction est d'extraire des info d'un fichier XML puis de construire un arbre de à partir d'un tableau rempli par les info extraite enfin un affichage.
    et tout cela prend en moyenne 1500 ms mais j'ai des valeurs aléatoires et trop disdantes. je vais essayer ta méthode Sylvain ( le pb c'est que j'ai un pb de pointeur "débordement de file" lorsque je réexécute; pour le moment je réexécute manuellement mon pg pour prendre différentes valeurs et puis la moyenne).

    Merci

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 17
    Points : 26
    Points
    26
    Par défaut Temps d'exécution
    Je te propose HPCOUNTER de MAS:

    Version 1.1, 2000® Mats Asplund, EMail: masprod@telia.com, Site: http://go.to/masdp

    HPCounter->Start();

    ton code

    var=HPCounter->ReadInt();

    A+

  8. #8
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    je l'ai téléchargé mais je ne sais pas comment l'utiliser!!!!!
    Merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Sinon il y a bien sûr la solution de compiler votre code avec DevCpp et le compilateur MingW32.

    Le temps de chaque fonction, le nombre d'appel est tracé dès lors que l'on active la fonction de profilage...
    Et c'est gratuit ! Génial, non ?

    Sans compter que l'exe produit pas MingW32 est plus rapide que celui de Builder 6 ou même Visual Studio 6 ...

  10. #10
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par Kaji
    ...Sans compter que l'exe produit pas MingW32 est plus rapide que celui de Builder 6
    Evidemment, l'utilisation de la VCL a un coût... et aussi quelques avantages. Je suis d'ailleurs partisan de ne pas l'utiliser systématiquement quand on peut facilement s'en passer, ce que d'autres, ici, ne trouvent pas judicieux. Mais je persiste : Utiliser un composant VCL riche juste pour exploiter une de ses méthodes facilement reproductible par ailleurs n'est pas souhaitable en terme de ressources machine.

  11. #11
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    je n'arrive pas à utiliser la méthode HPCOUNTER. pouvez vous m'aider ???
    Merci

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 17
    Points : 26
    Points
    26
    Par défaut Utilisation de HPCOUNTER
    Bonsoir,

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double vitesse1;
     
    HPCounterDeVitesse1->Start()

    ton code

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    vitesse1=HPCounterDeVitesse1->ReadInt();

    vitesse1 te retourne le temps en µs
    J'utilise 26 compteurs dans un prog sans problème;

    les timings ont été vérifiés avec un oscilloscope

  13. #13
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    j'ai compri comment l'utilisé mais comment déclarer HPCounter dans mon programme ??
    Merci d'avance

  14. #14
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Je ne sais pas si sa peut t'aider, il existe une classe (CTracer) qui permet de mesurer la durée d'exécution des différentes parties d'un programme.

    http://c.developpez.com/sources/bcb/...rairie#ctracer

    Je ne l'ai pas essayé donc je ne peux pas t'en dire plus!

  15. #15
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut
    Ca ne marcherai pas si tu utilises un type TDateTime ?
    Tu initialise une première variable TDateTime d1 = DateTime(); avant d'appeler ta fonction et une autre variable d2 en sortie ?

    Ensuite tu fais d2-d1 ?

    Au moins, tu es sûr que ton tmps n'est pas érronée en fonction des performances de ta machine.

  16. #16
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Pour mesurer le temps d'éxecution d'une méthode, on utilise un Profiler.
    On peut tout à fait utiliser les méthodes décrites ci-dessus et faire son propre Profiler. J'en ait vu 1 cette semaine qui me parait intéressant:

    http://www.codeproject.com/useritems/Profiler.asp

    Bien que le titre de l'article parle de VC++ celui-ci n'est pas spécifiquement écrit pour Visual Studio et devrait fonctionner avec BCB. Il faudra seulement changer les CString et autres CStdioFile en leur équivalent C ou VCL.
    Le profiler proprement dit est dans Profile.cpp, tu n'as pas à réécrire le reste qui ne sert ici qu'à itllustrer l'utilisation de la classe CProfile.

    yarp
    www.senosoft.com

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 17
    Points : 26
    Points
    26
    Par défaut Hpcounter
    Bonsoir,

    As-tu déposé le composant sur ta form ?

    Si oui tu as accès à la propriété NAME qui te permet de renommer ton compteur ?

    A++

  18. #18
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    je ne sai pas comment l'ajouter ??

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 17
    Points : 26
    Points
    26
    Par défaut Hpcounter
    Bonsoir,

    Va dans le menu composant -> Installer un composant

    Unité : HPCOUNTER.PAS

    Utilise le package dclusr.bpk (package utilisateur)

    Compile

    Si tout est OK tu trouveras le composant dans la palette

    A++

  20. #20
    Membre du Club Avatar de bhahmed
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 41
    Points
    41
    Par défaut
    l'unité du temps en sortie est en µseconde ????
    j'ai réussi à installé le nouveau conposant merci pour ton aide très précieuse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Stratégie] Mesurer le temps d'exécution d'une requête
    Par nice dans le forum Général Java
    Réponses: 5
    Dernier message: 29/01/2006, 18h53
  2. Réponses: 6
    Dernier message: 22/09/2005, 17h59
  3. [Test][Perf]Mesure du temps d'execution différente 2 fois de suite
    Par debdev dans le forum Tests et Performance
    Réponses: 11
    Dernier message: 22/07/2005, 13h04
  4. [info] mesure du temps
    Par nicolas581 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 02/08/2004, 14h45
  5. Mesurer le temps des instructions
    Par luckylucke dans le forum Assembleur
    Réponses: 9
    Dernier message: 03/09/2003, 22h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo