ayant eu à chronométrer, en VBScript, des temps d'exécution de programmes, je suis allé voir sur Intenet ce que je pouvais trouver.
J'ai été très déçu !
J'ai donc décidé de me débrouiller seul.
Or il se trouve que j'ai l'habitude de ne déclarer et d'initiliser une variable QUE si je m'en sers au minimum deux fois et de vérifier régulièrement, au moyen d'un "WScript.Echo", l'évolution du programme en cours de réalisation.
Cette habitude m'a fait apparaître des résultats surprenants.
Exemple d'une séquence de code avec emploi maximal de variables :
Code : Tout sélectionner
t1 = Timer
...
...
t2 = Timer
WScript.echo FormatNumber(t2 - t1, 3)
En supprimant la variable t2 utilisée une seule fois, ce code devient :
Code : Tout sélectionner
t1 = Timer
...
...
WScript.Echo FormatNumber(Timer - t1,3)
Autre chose liée : l'instruction "WScript.Sleep(n)" où n est le nombre de millisecondes de l'attente, oui il s'agit de millisecondes !
J'ai cherché et j'ai trouvé une instruction toute bête : "t1 = Timer + 0.1 - 0.1", t1 peut contenir jusqu'à 8 décimales (la dernière n'étant pas nulle) mais avec une particularité : le nombre formé par les deux derniers chiffres est soit 25, soit 50, soit 75...
J'ai décidé, pour mon usage personnel, de ne pas utiliser les fractions de millisecondes.
J'ai donc écrit un VBScript nommé Timer.vbs que vous trouverez ci-dessous (attention, il y a pas mal d'espaces inutiles supprimés) pour que vous puissiez vérifier la véracité de ce que j'avance.
Code : Tout sélectionner
Option Explicit
Dim i,n,s,sep,t1,t2
sep=WScript.CreateObject("WScript.shell").RegRead("HKCU\Control Panel\International\sDecimal")
s="Dans chaque boucle :"&VbCr&"_""t1"" est ce que retourne la fonction"&VbCr&" ""Timer()"" avec l'affi"&_
"chage de 3 déci-"&VbCr&" males,"&VbCr&"_le premier ""t2"" est affiché sans les"&VbCr&" zéros en part"&_
"ant de la droite,"&VbCr&"_le deuxième ""t2"" est affiché avec 4"&VbCr&" décimales."&VbCr&VbCr
i=0
Do
i=i+1
t1=Timer ' "t1" n'a que 2 décimales utilisables
WScript.Sleep(Int(t1/1000))
t2=Timer+0.1-0.1 ' ajout et retrait du même nombre DÉCIMAL (ici 0,1) => "t2" a jusqu'à 8 décimales utilisables !
s=s&"Boucle "&i&VbCr&"t1 = "&FormatNumber(t1,3)&VbCr&"t2 = "
n=t2
If n<>0 Then
Do
If Right(n,1)="0" and n<>"0" Then n=Left(n,Len(n)-1) Else Exit Do
Loop
n=Len(n)-InStr(n,sep)
s=s&FormatNumber(t2,n)
Else
s=s&"0"
End If
s=s&VbCr&"t2 = "&FormatNumber(t2,4)&VbCr&VbCr
Loop Until i=7 ' nombre de boucles
WScript.Echo s&"CONCLUSION : en ajoutant et en"&VbCr&"retranchant le même nombre DÉ-"&VbCr&"CIMAL lors "&_
"de l'appel à ""Timer"","&VbCR&"des décimales ""cachées"" ap-"&VbCr&"paraissent."&VbCr&_
VbCr&"Remarquez :"&VbCr&"_les millièmes de ""t1"" sont nuls,"&VbCr&"_l'éventuel arrondi du dernier chif"&_
"-"&VbCr&" fre du dernier ""t2"" de chaque bou-"&VbCr&" cle."&VbCr&VbCr&"CONSEIL : demandez, au maxim"&_
"um,"&VbCr&"4 décimales."&VbCr&"Exemple :"&VbCr&"""FormatNumber(Timer+0.1-0.1,4)"""
Juste un petit mot : ce VBScript crée une fenêtre pour afficher les résultats, cette fenêtre est volontairement étroite et haute, si la hauteur est trop importante, diminuez le nombre "7" de boucles (ligne 25 : Loop Until i=7)…
Modification du 8 juillet 2018 : j'ai remplacé les "REM" non situés en début de ligne de "Timer.vbs" par une apostrophe pour éviter un rejet par l'interpréteur "wscript.exe ou "cscript.exe".
À bientôt,
moums3