Genaue Messung der verstrichenen Zeit mit dem Delphi-Leistungsindikator

Bei routinemäßigen Desktop-Datenbankanwendungen spielt es für Endbenutzer selten eine Rolle, die Ausführungszeit einer Aufgabe um eine Sekunde zu verlängern. Wenn Sie jedoch Millionen von Baumblättern verarbeiten oder Milliarden eindeutiger Zufallszahlen generieren müssen, wird die Ausführungsgeschwindigkeit wichtiger.

Zeitüberschreitung für Ihren Code

In einigen Anwendungen sind sehr genaue, hochpräzise Zeitmessmethoden wichtig, und zum Glück bietet Delphi einen Hochleistungszähler, um diese Zeiten zu qualifizieren.

Verwenden von RTLs Jetzt Funktion

Eine Option verwendet die Now-Funktion. Jetzt, definiert in der SysUtils Einheit, gibt das aktuelle Systemdatum und die aktuelle Systemzeit zurück.

Ein paar Codezeilen messen die Zeit zwischen dem "Start" und "Stop" eines Prozesses:

Die Now-Funktion gibt das aktuelle Systemdatum und die aktuelle Systemzeit mit einer Genauigkeit von bis zu 10 Millisekunden (Windows NT und höher) bzw. 55 Millisekunden (Windows 98) zurück..

Für sehr kleine Intervalle reicht die Präzision von "Jetzt" manchmal nicht aus.

Verwenden der Windows-API GetTickCount

Für noch genauere Daten verwenden Sie die GetTickCount Windows API Funktion. GetTickCount Ruft die Anzahl der Millisekunden ab, die seit dem Start des Systems vergangen sind. Die Funktion hat jedoch nur eine Genauigkeit von 1 ms und ist möglicherweise nicht immer genau, wenn der Computer über einen längeren Zeitraum eingeschaltet bleibt.

Die abgelaufene Zeit wird als DWORD-Wert (32-Bit) gespeichert. Daher wird die Zeit auf Null gesetzt, wenn Windows 49,7 Tage lang ununterbrochen ausgeführt wird.

GetTickCount ist auch auf die Genauigkeit des Systemtimers beschränkt (10/55 ms).

Hochpräzises Timing Ihres Codes

Wenn Ihr PC einen hochauflösenden Leistungsindikator unterstützt, verwenden Sie die QueryPerformanceFrequency Windows-API-Funktion zum Ausdrücken der Häufigkeit in Zählern pro Sekunde. Der Wert der Zählung ist prozessorabhängig.

Das QueryPerformanceCounter Die Funktion ruft den aktuellen Wert des hochauflösenden Leistungszählers ab. Wenn eine Anwendung diese Funktion am Anfang und Ende eines Codeabschnitts aufruft, verwendet sie den Zähler als Zeitgeber mit hoher Auflösung.

Die Genauigkeit von hochauflösenden Timern liegt bei einigen hundert Nanosekunden. Eine Nanosekunde ist eine Zeiteinheit, die 0,000000001 Sekunden oder 1 Milliardstel Sekunde entspricht.

TStopWatch: Delphi-Implementierung eines hochauflösenden Zählers

Mit einer Anspielung auf .Net-Namenskonventionen, wie ein Zähler TStopWatch bietet eine hochauflösende Delphi-Lösung für präzise Zeitmessungen.

TStopWatch misst die abgelaufene Zeit, indem Timer-Ticks im zugrunde liegenden Timer-Mechanismus gezählt werden.