Mesurer avec précision le temps écoulé à l'aide du compteur de performances Delphi

Pour les applications de base de données de bureau de routine, l'ajout d'une seule seconde au temps d'exécution d'une tâche fait rarement une différence pour les utilisateurs finaux - mais lorsque vous devez traiter des millions de feuilles d'arbre ou générer des milliards de nombres aléatoires uniques, la vitesse d'exécution devient plus importante.

Expiration de votre code

Dans certaines applications, des méthodes de mesure du temps très précises et de haute précision sont importantes et, heureusement, Delphi fournit un compteur haute performance pour qualifier ces temps.

Utilisation des RTL Maintenant Une fonction

Une option utilise la fonction Now. Maintenant, défini dans le SysUtils unité, renvoie la date et l'heure actuelles du système.

Quelques lignes de code mesurent le temps écoulé entre le "début" et le "arrêt" d'un processus:

La fonction Now renvoie la date et l'heure système actuelles qui sont précises jusqu'à 10 millisecondes (Windows NT et versions ultérieures) ou 55 millisecondes (Windows 98).

Pour de très petits intervalles, la précision de "Now" n'est parfois pas suffisante.

Utilisation de l'API Windows GetTickCount

Pour des données encore plus précises, utilisez le GetTickCount Fonction API Windows. GetTickCount récupère le nombre de millisecondes qui se sont écoulées depuis le démarrage du système, mais la fonction n'a qu'une précision de 1 ms et peut ne pas toujours être précise si l'ordinateur reste sous tension pendant de longues périodes.

Le temps écoulé est stocké en tant que valeur DWORD (32 bits). Par conséquent, le temps passera à zéro si Windows est exécuté en continu pendant 49,7 jours.

GetTickCount est également limité à la précision de la minuterie du système (10/55 ms).

Haute précision chronométrant votre code

Si votre PC prend en charge un compteur de performances haute résolution, utilisez le QueryPerformanceFrequency Fonction API Windows pour exprimer la fréquence, en nombre par seconde. La valeur du compte dépend du processeur.

le QueryPerformanceCounter récupère la valeur actuelle du compteur de performances haute résolution. En appelant cette fonction au début et à la fin d'une section de code, une application utilise le compteur comme une minuterie haute résolution.

La précision des minuteries haute résolution est de l'ordre de quelques centaines de nanosecondes. Une nanoseconde est une unité de temps représentant 0,00000000001 seconde - ou 1 milliardième de seconde.

TStopWatch: Implémentation Delphi d'un compteur haute résolution

Avec un clin d'œil aux conventions de dénomination .Net, un compteur comme TStopWatch offre une solution Delphi haute résolution pour des mesures de temps précises.

TStopWatch mesure le temps écoulé en comptant les tics du minuteur dans le mécanisme de minuteur sous-jacent.