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

Langage Java Discussion :

calcul du temps d'exécution


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2007
    Messages : 71
    Par défaut calcul du temps d'exécution
    bonsoir a tout le monde
    je veux calculer le temps d'une fonction de calcule dans mon programme , c pour ça j'ai utilisé la class System avec la méthode currentTimeMillis() au début et au fin de la fonction,comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void fonction()
    {
    long deb= System.currentTimeMillis()
    /*le code*/
    long fin=System.currentTimeMillis()
    long temps=fin-deb;
    }
    mais le résultat est toujours 0,j'ai essayé avec tout le code de mon programme est ça me donne une résultat avec le milliseconds ,la fonction contient un code qui parcoure un Graph de l'API GraphStream
    merci pour l'aide

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    C'est probablement parce que ton instruction se termine en moins d'une milliseconde. Ce code devrait effectivement donner le temps écoulé.

    cf. ce test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ppublic static void main(String[] args) throws InterruptedException {
    	long deb = System.currentTimeMillis();
    	Thread.sleep(1000);
    	long end = System.currentTimeMillis();
     
    	System.out.println(end - deb);
    }
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    A savoir également que si le temps retourné a beau être en millisecondes, la précision de currentTimeMillis() est bien inférieure à la milliseconde.

    C'est à dire que même si le code entre les deux instruction prend fait quelque dizaines de millisecondes, il retournera tout de même 0.

    Pour avoir une mesure plus précise des codes très rapide, tu devrais les faire executer dans une boucle un nombre de fois élevé(1000 fois par exemple) entre les deux System.currentTimeMillis() et diviser le résultat obtenu par le nombre d'itérations.

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Uther Voir le message
    A savoir également que si le temps retourné a beau être en millisecondes, la précision de currentTimeMillis() est bien inférieure à la milliseconde.
    En effet cela dépend fortement du système, mais en général cela tourne autour de 16 ms. Donc dans le pire des cas on peut avoir une erreur de 32 ms :

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	long count = 0;
    	long c1 = System.currentTimeMillis();
    	long c2;
    	do {
    		 c2 = System.currentTimeMillis();
    		 count++;
    	} while (c1 == c2);
    	System.out.println("Différence : " + (c2-c1) + " ms" );
    	System.out.println("Itérations : " + count);
    Ce qui me donne quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Différence : 16 ms
    Itérations : 152323
    Bref tu as une différence de 16 seulement après plus de 150000 appels...



    Sinon tu peux utiliser System.nanoTime() qui utilise généralement une horloge plus précise...


    a++

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2007
    Messages : 71
    Par défaut
    bonsoir
    merci pour l'interaction
    le temps d'exécution est très important car je l'utilise dans d'autre calcules c pour ça je doit éviter l'insertion d'un sleep au milieu du code
    j'ai essayé avec System.nanoTime() ,a la fin je divise le résultat sur 1000000,et je pense que c la meilleur solution ,biensur si vous n'avez pas de problème avec ça
    merci

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    C'est à toi de voir si cela te convient, sachant quand même qu'il n'y a pas de garantie de précision non plus...

    En clair cela te renvoi un résultat en nanosecondes, mais la vrai précision peut être plus grande...

    a++

Discussions similaires

  1. [C++] Calcul du temps d'exécution
    Par Castagnems dans le forum C++
    Réponses: 7
    Dernier message: 12/01/2012, 12h46
  2. Calculer le temps d'exécution d'une requête
    Par BRAUKRIS dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/03/2007, 12h59
  3. Calculer le temps d'exécution d'un script
    Par pomgnon dans le forum C
    Réponses: 2
    Dernier message: 28/12/2006, 15h49
  4. Réponses: 3
    Dernier message: 11/03/2006, 15h35
  5. [C#] Calcul du temps d'exécution.
    Par lozzko dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2005, 16h12

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