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'arbres 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 Delphes fournit un compteur haute performance pour qualifier ces temps.
Utilisation des RTL Maintenant Une fonction
Une option utilise le Maintenant une fonction. Maintenant, défini dans le SysUtils, 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 GetTickCountAPI Windows une fonction. 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 la précision de 1 ms et peut ne pas toujours être précis si l'ordinateur reste sous tension pendant de longues périodes de temps.
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 du temporisateur 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 propose 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.
- le IsHighResolution La propriété indique si le temporisateur est basé sur un compteur de performances haute résolution.
- le Début La méthode commence à mesurer le temps écoulé.
- le Arrêtez La méthode arrête de mesurer le temps écoulé.
- le ElapsedMilliseconds La propriété obtient le temps total écoulé en millisecondes.
- le Écoulé La propriété obtient le temps total écoulé en ticks de minuterie.
Voici un exemple d'utilisation: