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 :

stabilité de System.currentTimeMillis


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Points : 54
    Points
    54
    Par défaut stabilité de System.currentTimeMillis
    Salut

    pour tester le temps d'exécution de deux programmes j'utilise la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.currentTimeMillis()
    comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    long before = System.currentTimeMillis();
    	for (int i = 0; i < 1000; i++) {
    //traitement
     }
     
    System.out.println( "Le temps d'éxecution (ms.) "+(System.currentTimeMillis() - before));
    mais les valeurs que je reçois ne sont pas stables exemple:
    programme 1: 1023, 998, 1034,...
    programme 2: 987, 1028, 1056,...
    et la je ne peux pas du tout trancher sur qui est le plus rapide !!!!!!!

    voila si vous avez une idée n'hésitez pas et merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut
    Les deux sont équivalent. Le temps d'éxécution est de 1 sec en moyenne...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Points : 54
    Points
    54
    Par défaut
    ok damien77 merci mais j'aimerai tout de comprendre pourquoi ,parce que les deux programmes ne change pas à chaque nouvelle exécution !!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Points : 73
    Points
    73
    Par défaut
    oui mais l'OS ne donne pas le même temps processeur tous le temps pour chaque application du PC...

  5. #5
    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,


    Selon les systèmes la granularité de currentTimeMillis() peut varier. Sous Windows par exemple elle est aux alentour de 16 ms. C'est à dire que les valeurs retournées par la méthode ne sont mis à jour que toutes les 16ms...

    Donc déjà tu as des marges d'erreurs qui peuvent aller jusqu'à 21ms (puisqu'il y a deux appel de méthode).

    A coté de cela tu as des impondérables qui peuvent faire varier le résultat (programme externe, ordonnancement, interruption, etc...)




    Pour éviter ces "désagrément", il faudrait augmenter le nombre d'itération de la boucle pour voir si les écarts évolue ou pas.

    A mon avis tant que tu n'obtiens pas un écart d'au moins 500ms ce n'est pas vraiment représentatif...

    a++

  6. #6
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut intégrale
    Salut,

    effectivement le fonctionnement de System.currentTimeMillis() dépend de la plate-forme de lancement de ton projet.

    Comme le propose adiGuba, augmente le nombre d'itérations chronométrées et ne tranche pas trop tôt. Je développe une classe pour choisir un algorithme en temps réel, j'ai sensiblement les même difficultés.


    Actuellement j'en suis là :

    Je veux trancher entre plusieurs algorithmes d'affichages (ou autres).

    J'ai fait une interface précisant mes besoins pour une classe de ce genre.

    Ensuite je fais (en algo) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Initialisations des différents algorithmes et des chronomètres associés.
    ...
    Boucle principale {
    ...
    Algorithme a = chercherMeilleurAlgorithme();
    Nombre evaluation = a.faitTravail(paramètres);
    a.modifierEvaluation(paramètres, evaluation);
    ...
    FinBoucle }
    Ce qu'il te reste à faire, c'est de définir deux choses :
    - la charge à fournir est-elle toujours la même ?
    - comment évaluer la qualité d'un travail en fonction de ses paramètres et du temps mis pour exécuter le code ?

    Partant de là tu définis un algorithme d'évaluation qui te permettra de noter judicieusement chaque algorithme et de choisir à chaque tour le meilleur en fonction de l'évaluation actuelle.

    Au final l'algorithme aplatit la granularité de System.currentTimeMillis en augmentant le nombre de tests. De plus, il se tient en permanence à jour.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

Discussions similaires

  1. [Java] Windows 7 & System.currentTimeMillis()
    Par GyZmoO dans le forum Général Java
    Réponses: 4
    Dernier message: 02/09/2010, 13h39
  2. System.currentTimeMillis() ou getTime()
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/07/2007, 13h54
  3. [Systeme]currentTimeMillis
    Par Guybrush dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 08/02/2006, 16h11
  4. [Info]Plus précis que System.currentTimeMillis()
    Par SuperCed dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 10/06/2005, 14h07
  5. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16

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