Page 1 sur 1
Chronometrer les fontions
Publié : jeu. 09/nov./2006 15:42
par Fig
Bonjour,
Je suis sûr que qques uns d'entre vous se sont déja penché sur le problème de savoir quel était entre deux codes ou deux instructions la plus rapide.
Je cherche un bout de code pour chronometrer précisement une éxecution.
par exemple :
Code : Tout sélectionner
[pseudo code ON]
startchrono()
for i=1 to 2000
instruction(s) à tester
next i
finchrono()
affiche le temps écoulé en msec.
[/pseudocode OFF]
Si quelqu'un a ça dans sa boite à outil, ça m'interresse

Publié : jeu. 09/nov./2006 15:47
par Progi1984
Code : Tout sélectionner
Global Chrono
Procedure StarChrono()
chrono = EllapsedMillisecs()
endprocedure
Procedure StopChrono()
fin = EllapsedMillisecs() - Chrono
debug fin
endprocedure
Publié : jeu. 09/nov./2006 16:00
par Fig
heu qui c ki se tape encore l'air

?
c moa
Merci bien en tout cas

Publié : jeu. 09/nov./2006 17:03
par Flype
Progi1984 a écrit :Code : Tout sélectionner
Global Chrono
Procedure StarChrono()
chrono = EllapsedMillisecs()
endprocedure
Procedure StopChrono()
fin = EllapsedMillisecs() - Chrono
debug fin
endprocedure
oui en gros c'est çà.
sauf que - ATTENTION - on ne devrait jamais faire des tests de vitesse
avec le debugger activé !
donc vaut mieux un truc du genre :
Code : Tout sélectionner
Macro StarChrono()
chrono = EllapsedMillisecs()
EndMacro
Macro StopChrono()
MessageRequester("resultat", Str(EllapsedMillisecs() - chrono))
EndMacro
Publié : jeu. 09/nov./2006 17:04
par Progi1984
JE sais... ms j'ai fait ca de tete et rapidement !
Mais j'ai fait une erreur
PS : as tu vu cairo en MP ?
Publié : jeu. 09/nov./2006 17:07
par Flype
pas encore progi - je vais voir.
Publié : jeu. 09/nov./2006 19:28
par Droopy
Pour mesurer des valeurs inférieurs à la ms il y a ceci :
Code : Tout sélectionner
; Idea from Erix14 / Djes
; Return the time elapsed between Start & Stop in second
; 0.001 = 1 ms
; 0.000001=1 µs
; Caution ! : If the installed hardware supports a high-resolution performance counter
; MeasureHiResIntervalStart return 1 / 0 if no hardware support
; Use this functions for measure interval < 1 ms
Global MeasureHiResIntervalTime.l
ProcedureDLL MeasureHiResIntervalStart()
QueryPerformanceFrequency_(@retour)
If retour <>0 : retour = 1 : EndIf
QueryPerformanceCounter_(@MeasureHiResIntervalTime)
ProcedureReturn retour
EndProcedure
ProcedureDLL.f MeasureHiResIntervalStop()
QueryPerformanceCounter_(@Temp)
Difference=Temp-MeasureHiResIntervalTime
QueryPerformanceFrequency_(@HiResTimerFrequency)
Periode.f=1/HiResTimerFrequency
DureeTotale.f=Difference*Periode
ProcedureReturn DureeTotale
EndProcedure
;/ Test1 : For Next
If MeasureHiResIntervalStart()
For n=0 To 10000
Next n
Debug MeasureHiResIntervalStop()
EndIf
;/ Test2 : Repeat : Until
If MeasureHiResIntervalStart()
Repeat
a+1
Until a=10000
Debug MeasureHiResIntervalStop()
EndIf
Debug "The fastest is For/Next"