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

API standards et tierces Java Discussion :

[ methode ] temps execution [FAQ]


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 229
    Points : 90
    Points
    90
    Par défaut [ methode ] temps execution
    Bonjour,

    Comment connaitre le temps d'éxecution d'une méthode java?


    Merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser System.currentTimeMillis() avant et après l'appel de la méthode et de faire la différence entre les deux valeurs...

    a++

  3. #3
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Tu peux utiliser System.currentTimeMillis() avant et après l'appel de la méthode et de faire la différence entre les deux valeurs...

    a++
    Pour ma part je ferai cela mais n fois de suite puis je diviserai par n (pour éviter de perdre de la précision )

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Hello,

    Moi j'avais vu quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static double loopList() {
    		long before = System.currentTimeMillis();
    		int size = l.size();
    		for (int i = 0; i < RUN_LENGTH; i++) {
    			for (int j = 0; j < size; j++)
    				tmp = (String) l.get(j);
    		}
    		return (System.currentTimeMillis() - before) * 1000.0 / RUN_LENGTH;
    	}
    Ou RUN_LENGTH est le nombre de fois que tu exécutes ta méthode

    ++

    Antoine

    -----

    Programmeur pas très certifié

  5. #5
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par toinou780
    Hello,

    Moi j'avais vu quelque chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static double loopList() {
    		long before = System.currentTimeMillis();
    		int size = l.size();
    		for (int i = 0; i < RUN_LENGTH; i++) {
    			for (int j = 0; j < size; j++)
    				tmp = (String) l.get(j);
    		}
    		return (System.currentTimeMillis() - before) * 1000.0 / RUN_LENGTH;
    	}
    Ou RUN_LENGTH est le nombre de fois que tu exécutes ta méthode

    ++

    Antoine

    -----

    Programmeur pas très certifié
    Voila c'est un truc comme ca par exemple

  6. #6
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par adiGuba
    Tu peux utiliser System.currentTimeMillis() avant et après l'appel de la méthode et de faire la différence entre les deux valeurs...
    je ne suis pas très convaincu par la précision de de cette methode.
    j'ai fait plusieurs tests sur le même bout de code et à chaque fois ça me retourne une valeur différente (parfois même zéro) et surtout quand il y a des boucles...
    je me demande s'il y a un truc du genre benchmark comme en C se serait beaucoup plus précis et plus fiable à mon avis.

  7. #7
    Membre éprouvé

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par soulhouf
    Citation Envoyé par adiGuba
    Tu peux utiliser System.currentTimeMillis() avant et après l'appel de la méthode et de faire la différence entre les deux valeurs...
    je ne suis pas très convaincu par la précision de de cette methode.
    j'ai fait plusieurs tests sur le même bout de code et à chaque fois ça me retourne une valeur différente (parfois même zéro) et surtout quand il y a des boucles...
    je me demande s'il y a un truc du genre benchmark comme en C se serait beaucoup plus précis et plus fiable à mon avis.
    C'est la soustraction qui te donne 0 ou la division qui suit la soustraction???

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par soulhouf
    je ne suis pas très convaincu par la précision de de cette methode.
    j'ai fait plusieurs tests sur le même bout de code et à chaque fois ça me retourne une valeur différente (parfois même zéro) et surtout quand il y a des boucles...
    Cela dépend de ton code, s'il est assez simple le temps d'exécution peut être de l'ordre de la nanosecondes, c'est donc normal d'avoir un temps total égal à 0 millisecondes...

    Dans ce cas il faut utiliser la méthode indiqué par Benjamin et toinou780...
    Ma réponse concernait le calcul du temps d'exécution d'un méthode 'longue' (par exemple calculer le temps de téléchargement d'un fichiers etc...).

    Maintenant tu peux eventuellement utiliser la méthode System.nanoTime(), mais la précision n'est pas garantie et dépend du système...


    Citation Envoyé par soulhouf
    je me demande s'il y a un truc du genre benchmark comme en C se serait beaucoup plus précis et plus fiable à mon avis.
    Ca je l'ignore je ne connais pas le 'benchmark' du C...

  9. #9
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par adiGuba
    Ca je l'ignore je ne connais pas le 'benchmark' du C...
    voici un exemple de benchmark en C:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #ifndef __BENCHMARK__
    #define __BENCHMARK__
     
    #include <sys/time.h>
    #include <sys/resource.h>
     
     
     
    /*
     * milliseconds --
     *
     *  Renvoie le nombre de millisecondes passees a executer le processus courant en mode utilisateur
     *  jusqu'au moment de l'appel.
     */
    inline static
    unsigned long milliseconds ()
    {
      struct rusage     res;
     
      if (getrusage(RUSAGE_SELF, &res) == -1)
        return 0;
     
      return (res.ru_utime.tv_usec / 1000) + (res.ru_utime.tv_sec * 1000);
    }
     
     
     
    /*
     * milliseconds_t --
     *
     *  Renvoie le nombre de millisecondes passees a executer le processus courant en mode utilisateur
     *  et en mode systeme jusqu'au moment de l'appel.
     */
    inline static
    unsigned long milliseconds_t ()
    {
      struct rusage     res;
     
      if (getrusage(RUSAGE_SELF, &res) == -1)
        return 0;
     
      return  (res.ru_utime.tv_usec / 1000) + (res.ru_utime.tv_sec * 1000) +
              (res.ru_stime.tv_usec / 1000) + (res.ru_stime.tv_sec * 1000);
    }
     
    #endif
    ça ressemble un peu à la méthode indiqué par Benjamin et toinou780 mais c'est beaucoup plus performant car c'est basé sur des donnée système...

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Alors qu'attends-tu, utilise JNI et pond-nous quelques chose de similaire et orienté Objet

    Ne prend pas le style de ce message

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ah oui c'est vrai je connaissais getrusage() en plus... mais ca fait longtemps que je n'ai plus fait de prog. système en C...
    Et c'est normal que ce soit plus précis c'est de l'ordre de la microsecondes... Donc System.nanoTime()de Java 5.0 devrait avoir des résultats similaires...

    Par contre il me semble que getrusage() n'est pas portable (inexistant sous Windows par exemple).

    a++

  12. #12
    Membre habitué Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par adiGuba
    Par contre il me semble que getrusage() n'est pas portable (inexistant sous Windows par exemple).
    ouai et c'est ça l'avantage de java par rapport à C: la portabilité

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Attention: un programme C peut très bien être portable, et un programme Java peut ne pas être portable du tout... Et un programme Java qui abuse de JNI ou des Runtime.exec() peut très vite être complexe à porter sur un autre système...

    Mais c'est vrai que le langage (et Sun) facilite la portabilité...

    Et actuellement le problème se pose surtout avec J2ME (java pour appareil mobile) car les premières spécifications étaient très limités et que chaque constructeur a alors proposé une API supplémentaire (non-portable évidemment). Mais cela devrait s'arranger avec MIDP 2.0.

  14. #14
    Membre régulier Avatar de Actarus78
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 87
    Points : 118
    Points
    118
    Par défaut
    bonjour,

    Pour ma part j'ultilise un superbe outil (qui est l'equivalent en java du QAC ou QAC++ et purify réunit )

    JProbe

    Cela permet de savoir tout un tas de choses sur l'execution d'un programe, le temps passé dans chaque class, methodes, le nombre d'appel, d'instanciations etc... Et tout ca avec une representation graphique de l'ensemble des objets du programme. Il possede aussi ses propes APi et s'integre dans la plupart des environements de dev

    JProbe offers class- and method-level performance metrics to help developers “blueprint” their applications for automatic, per-build performance measurement and tracking, with virtually zero impact to development. JProbe simply snaps into your existing build processes, integrating with tools like ANT and with JUnit test scripts. ANT-supported Triggers allow you to integrate performance testing, memory testing and coverage analysis into your nightly build systems.

Discussions similaires

  1. [Tuning] Temps execution
    Par Ne0zenith dans le forum Oracle
    Réponses: 26
    Dernier message: 07/08/2006, 14h30
  2. Erreur de la méthode FileSearch.Execute
    Par EE dans le forum Access
    Réponses: 21
    Dernier message: 09/05/2006, 14h01
  3. temps execution CreateProcess
    Par dighou dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2005, 16h18
  4. [MFC] pb temps execution
    Par ricky78 dans le forum MFC
    Réponses: 4
    Dernier message: 21/01/2005, 11h50
  5. Temps execution mysql
    Par azman0101 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/07/2004, 09h42

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