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 :

mesure de performances [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut mesure de performances
    Bonjour,
    Il me semble qu'il éxiste un outil capable d'indiquer le temps d'éxécution des fonctions d'un programme mais je ne me souviens plus de son nom...
    C'est pour améliorer le temps d'éxécution de certaines routines de mon programme
    Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    tu peux utiliser la fonction getTickCount() de l'API windows. elle te revoie le nombre de millisecondes écoulée depuis l'execution de windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UINT t = getTickCount();
    maFonction();
    UINT tempsDeLaFonction = getTickCount() - t; //en millisceondes
    voila, j'espere que c'est ce que tu cherches

  3. #3
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Merci mais je pensais plutot à un outil intégré à BCB, ton idée est bonne mais cela va me demander pas mal de temps pour l'ajouter à mon projet car je dois avec cela répérer la méthode qui prends bcp trop de temps à l'éxécution. Je ne sais pas laquelle c'est et j'en ai un certain nombre !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    fais une fonction que tu appeles apres chaqu'une de tes fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    vector<unsigned int> tpsPerf;
    void calculPerf() {
       static t = getTickCount();
       tpsPerf.add(getTickCount() - t);
       t = getTickCount();
    }
    tu n'a plus qu'a appeler cette fonction à n'importe quel endroit de ton code et tu obtiendras au final un tableau avec tous les temps desperformances.

    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct Temps {
       AnsiString desc;
       unsigned int temps;
    };
    vector<Temps> tpsPerf;
    void calculPerf(AnsiString _desc) {
       static t = getTickCount();
       tpsPerf.add((Temps){_desc, getTickCount() - t});
       t = getTickCount();
    }
    s'il n'y a pas d'erreur, ca devrait fonctionner.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    J'avais fait une petite classe qui permet de calculer le temps que prend chaque fonction en ajoutant simplement une instence dans la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CTracer globalTracker;
     
    void fct1() {
      CTracer local(globalTracker,"Section: fct1","Description: Test");
      ...
    }
     
    void fct2() {
      CTracer local(globalTracker,"Section: fct2","Deuxième description");
      ...
    }
     
    void ShowTracer() {
      out<<globalTracer;
    }
    Le programme permet de tracer des sections et des sous-sections pour avoir le temps total, le temps dans chaque section, le nombre de fois que chaque section a été appelée et le temps moyen par appel (en ms et en % par rapport à la section supérieure).

    Le rapport ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    +->[] Total=0ms Specific=-109255ms ()
    |+->[TXMLParser] Total=109255ms (/2=54627.3 ms) Specific=-3164.81ms=-0.0289673% (/2=-1582.4 ms) (Global publication task)
    ||+->[Include] Total=3916.44ms=3.58469% (/7332=0.534156 ms) (Include file: pause while include)
    ||+->[Num] Total=5.99117ms=0.00548368% (/411=0.014577 ms) (Numerical expressions)
    ||+->[Var] Total=20655.2ms=18.9055% (/180991=0.114123 ms) (Manage text variables)
    ||+->[Eval] Total=4593.05ms=4.20398% (/26710=0.17196 ms) (Eval special commands)
    ||+->[Text] Total=481.888ms=0.441069% (/147478=0.00326753 ms) (Litteral text)
    ||+->[Switch] Total=1143.14ms=1.04631% (/36243=0.031541 ms) (Conditional execution)
    ||+->[Repeat] Total=73611ms=67.3757% (/8213=8.96274 ms) Specific=3319.86ms=0.0451% (/8213=0.40422 ms) (Loops)
    |||+->[OpenENUMRecordSet] Total=306.622ms=0.416544% (/3691=0.0830729 ms) (Open enum dataset)
    |||+->[OpenADORecordSet] Total=66193.5ms=89.9233% (/5065=13.0688 ms) (Open ADO command to database)
    |||+->[OpenRangeRecordSet] Total=3791.05ms=5.15011% (/316=11.997 ms) (Open range dataset)
    ||+->[Field] Total=3162.74ms=2.89483% (/59880=0.0528179 ms) (Extract field from dataset)
    ||+->[Display] Total=2082.83ms=1.9064% (/721=2.88881 ms) (Display info for the user)
    ||+->[Delete] Total=646.798ms=0.59201% (/3=215.599 ms) (Delete files)
    ||+->[Copy] Total=1527.99ms=1.39856% (/10=152.799 ms) (Copy files)
    ||+->[Output] Total=592.345ms=0.542169% (/378=1.56705 ms) (Redirect output in another file)
    Si tu es intéressé, je peux te le mettre sur mon site web pour télécharger les sources.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Pour complément, dans mon exemple, on voit que la section "[repeat]" est la plus gourmande (67% du temps total) et que dans cette section, c'est la partie (sous-section) "[OpenADORecordset]" qui est la principale cause (89% des 67% avec des temps d'appel longs, en moyenne 8.9ms)

    Pour l'exemple de code, on aurait un rapport du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    +->[] Total=Xms
    |+-> Section: fct1 Total=Xms (/n=X/n ms) (Description: Test)
    |+-> Section: fct2 Total=Yms (/m=Y/m ms) (Deuxième description)

  7. #7
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Citation Envoyé par Patrick Seuret
    J'avais fait une petite classe qui permet de calculer le temps que prend chaque fonction en ajoutant simplement une instence dans la fonction:

    Si tu es intéressé, je peux te le mettre sur mon site web pour télécharger les sources.
    Oui, cela m'interesse, merci !

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    Au cas où, toute contribution est la bienvenue : http://www.developpez.net/forums/viewtopic.php?t=262808


  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    J'ai mis à jour mon site web. Tu trouveras les sources à la page suivante http://www.seuret.ch/software.html#ctracer dans la rubrique "source files".

    Il n'y a pas de doc, mais j'ai abondament commenté le code (avec mon mauvais anglais).

    N'hésite pas à me poser des questions si ce n'est pas clair.

  10. #10
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Citation Envoyé par Patrick Seuret
    J'ai mis à jour mon site web. Tu trouveras les sources à la page suivante http://www.seuret.ch/software.html#ctracer dans la rubrique "source files".

    Il n'y a pas de doc, mais j'ai abondament commenté le code (avec mon mauvais anglais).

    N'hésite pas à me poser des questions si ce n'est pas clair.
    MERCI, c sympa !

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    As-tu réussi à utiliser ma classe? Si oui, qu'en penses-tu? Si non, qu'est-ce qui n'était pas clair?

    Je suis curieux d'avoir ton feedback (positif ou négatif)...

    D'avance merci

Discussions similaires

  1. mesure de performance
    Par LGnord dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2008, 13h17
  2. Weblogic: Mesure de performances
    Par jeepnc dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 04/04/2007, 16h57
  3. Mesurer les performances d'une application Windows
    Par Kr00pS dans le forum Windows
    Réponses: 1
    Dernier message: 12/02/2007, 13h35
  4. Gérer un chrono pour mesurer la performance d'une méthode.
    Par k o D dans le forum Général Java
    Réponses: 7
    Dernier message: 11/04/2006, 08h19
  5. [NetBeans] mesure de performances?
    Par xheo dans le forum NetBeans
    Réponses: 1
    Dernier message: 31/03/2006, 16h38

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