18
juillet
2012
Le Stop watch de Guava
juillet
2012
Un article de thierryler
3 Commentaires
Si vous êtes comme moi, vous mesurez souvent le temps que prennent certains blocs de code à s’exécuter. Guava apporte un chronomètre intéressant pour réaliser ce genre de chose.
Plus concrètement, en Java classique, on doit écrire ça :
1 2 3 4 5 6 7 8 9 | long start = new Date().getTime(); // un traitement long (ou pas) foo(); long end = new Date().getTime(); long duration = end - start; System.out.println(duration); // 11 ms |
ou même déjà mieux, comme l’a très justement proposé y@m’s :
1 2 3 4 | long start = System.currentTimeMillis(); ... long end= System.currentTimeMillis() ... |
Franchement, on peut faire mieux. Avec Guava, on va utiliser un chronomètre nommé Stopwatch :
1 2 3 4 5 6 7 8 9 | Stopwatch sw = new Stopwatch(); sw.start(); // un traitement long (ou pas) foo(); sw.stop(); long duration = sw.elapsedMillis(); System.out.println(duration); // 11 ms |
A noter qu’on peut directement imprimer l’objet Stopwatch :
1 | System.out.println(sw); |
Et petit bonus, on a le droit de demander une grande précision :
1 2 3 4 5 6 7 | long duration = sw.elapsedTime(TimeUnit.NANOSECONDS); long duration2 = sw.elapsedTime(TimeUnit.MICROSECONDS); long duration3 = sw.elapsedTime(TimeUnit.MILLISECONDS); System.out.println(duration); // 11179739 ns System.out.println(duration2); // 11179 us System.out.println(duration3); // 11 ms |
3 Commentaires + Ajouter un commentaire
Commentaires récents
- Le Stop watch de Guava dans
- Le Stop watch de Guava dans
- Le Stop watch de Guava dans
A noter que c’est une fonctionnalité qui n’est pas « visible » sur le wiki de Guava, sauf rapidement dans les notes de release de la v10, sachant qu’on est à la v13…
Oui, très juste. Je l’ajoute à l’article.
Pour répondre à tes autres questions, voici un lien direct vers la javadoc :
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Stopwatch.html
En gros, on peut faire :
2
log.info("duree : " + sw); // ça va logguer avec le format "12.3 ms" <br />
Voici ce que dit la doc à propos de toString() :
A noter que l’appel à la méthode stop() est optionnel. Rien n’empêche alors d’enchaîner plusieurs appels à elapsedMillis(), comme lorsqu’on chronomètre plusieurs coureurs au 100m.
Généralement on fait plutôt un
qu’un
. Cela évite d’instancier deux objets Date, surtout que le coût de la deuxième instanciation est comptée dans le temps écoulé et peut donc fausser la mesure.
Personnellement ce que je trouve le plus génant à chaque fois que je « chronomètre » du code ce n’est pas tant la précision mais surtout l’affichage dans un format lisible (du genre « X min Y s Y ms »).
Est-ce que Stopwtach fourni quelque chose de ce genre ?