web-dev-qa-db-fra.com

Comment calculer la durée de mon programme?

Duplicate possible:
Comment chronométrer l'exécution d'une méthode en Java?

J'ai écrit un programme et je souhaite maintenant calculer le temps total d'exécution de mon programme du début à la fin.

Comment puis-je faire ceci?

110
Mahdi_Nine

Utilisez System.nanoTime pour obtenir l'heure actuelle.

long startTime = System.nanoTime();
.....your program....
long endTime   = System.nanoTime();
long totalTime = endTime - startTime;
System.out.println(totalTime);

Le code ci-dessus imprime la durée d'exécution du programme en nanosecondes.

225
snakile

Au début de votre méthode principale, ajoutez cette ligne de code:

final long startTime = System.nanoTime();

Et puis, à la dernière ligne de votre méthode principale, vous pouvez ajouter:

final long duration = System.nanoTime() - startTime;

duration contient maintenant le temps en nanosecondes que votre programme a exécuté. Vous pouvez par exemple imprimer cette valeur comme ceci:

System.out.println(duration);

Si vous souhaitez afficher la durée en secondes, vous devez diviser la valeur par 1'000'000'000. Ou si vous voulez un objet Date: Date myTime = new Date(duration / 1000); Vous pouvez ensuite accéder aux différentes méthodes de Date pour imprimer le nombre de minutes, d'heures, etc.

41
krtek

Utilisez System . currentTimeMillis () ou System . nanoTime () si vous souhaitez une lecture encore plus précise. Généralement, les millisecondes sont suffisamment précises si vous devez afficher la valeur à l'utilisateur. De plus, System.nanoTime() peut renvoyer des valeurs négatives. Il est donc possible que, si vous utilisez cette méthode, la valeur renvoyée ne soit pas correct.

Une utilisation générale et large consisterait à utiliser des millisecondes:

long start = System.currentTimeMillis();

... 


long end = System.currentTimeMillis();

NumberFormat formatter = new DecimalFormat("#0.00000");
System.out.print("Execution time is " + formatter.format((end - start) / 1000d) + " seconds");

Notez que les nanosecondes sont généralement utilisées pour calculer des exécutions de programme très courtes et précises, telles que des tests unitaires et des analyses comparatives. Ainsi, pour l'exécution globale du programme, les millisecondes sont préférables.

19
Yanick Rochon

L’approche générale consiste à:

  1. Obtenez le temps au début de votre repère, par exemple au début de main().
  2. Exécutez votre code.
  3. Obtenez le temps à la fin de votre repère, disons à la fin de main().
  4. Soustrayez l'heure de début de l'heure de fin et convertissez-la en unités appropriées.

Un indice: regardez System.nanoTime() ou System.currentTimeMillis().

4
Chinmay Kanchi

Vous devez connaître l'heure de démarrage de l'application et la comparer à l'heure de fin de l'application.

Quand l'application démarre:

Calendar calendar = Calendar.getInstance();

// Get start time (this needs to be a global variable).
Date startDate = calendar.getTime();

Quand l'application se termine

Calendar calendar = Calendar.getInstance();

// Get start time (this needs to be a global variable).
Date endDate = calendar.getTime();

Pour obtenir la différence (en millisecondes), procédez comme suit:

long sumDate = endDate.getTime() - startDate.getTime();
2
FreeAsInBeer

Outre les fonctions connues (et déjà mentionnées) System.currentTimeMillis() et System.nanoTime(), il existe également une bibliothèque ordonnée appelée perf4j , qui peut également être utile, selon votre objectif.

2
Boris