Bonjour,
Comment connaitre le temps d'éxecution d'une méthode java?
Merci
Bonjour,
Comment connaitre le temps d'éxecution d'une méthode java?
Merci
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écisionEnvoyé par adiGuba
)
Hello,
Moi j'avais vu quelque chose comme ça
Ou RUN_LENGTH est le nombre de fois que tu exécutes ta méthode
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; }
++
Antoine
-----
Programmeur pas très certifié
Voila c'est un truc comme ca par exempleEnvoyé par toinou780
![]()
je ne suis pas très convaincu par la précision de de cette methode.Envoyé par adiGuba
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???Envoyé par soulhouf
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...Envoyé par soulhouf
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...
Ca je l'ignore je ne connais pas le 'benchmark' du C...Envoyé par soulhouf
voici un exemple de benchmark en C:Envoyé par adiGuba
ç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...
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
Alors qu'attends-tu, utilise JNI et pond-nous quelques chose de similaire et orienté Objet
![]()
Ne prend pas le style de ce message
![]()
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++
ouai et c'est ça l'avantage de java par rapport à C: la portabilitéEnvoyé par adiGuba
![]()
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.
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.
Partager