Hochleistungstimer in Delphi

Bei routinemäßigen Desktop-Datenbankanwendungen macht das Hinzufügen einer einzelnen Sekunde zur Ausführungszeit einer Aufgabe für Endbenutzer selten einen Unterschied - aber Wenn Sie Millionen von Baumblättern verarbeiten oder Milliarden eindeutiger Zufallszahlen generieren müssen, wird die Ausführungsgeschwindigkeit wichtiger.

Zeitüberschreitung Ihres Codes

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

Verwenden von RTLs Jetzt Funktion

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

Einige Codezeilen messen die verstrichene Zeit zwischen "Start" und "Stopp" eines Prozesses:

Die Now-Funktion gibt das aktuelle Systemdatum und die aktuelle Systemzeit zurück, die bis zu 10 Millisekunden (Windows NT und höher) oder 55 Millisekunden (Windows 98) genau sind.

Für sehr kleine Intervalle reicht die Genauigkeit von "Jetzt" manchmal nicht aus.

instagram viewer

Verwenden der Windows-API GetTickCount

Verwenden Sie für noch genauere Daten die GetTickCountWindows-API Funktion. GetTickCount Ruft die Anzahl der Millisekunden ab, die seit dem Start des Systems vergangen sind, die Funktion jedoch nur Die Genauigkeit beträgt 1 ms und ist möglicherweise nicht immer genau, wenn der Computer für längere Zeit eingeschaltet bleibt Zeit.

Die verstrichene 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 System-Timers (10/55 ms) beschränkt.

Hochpräzises Zeitlimit für Ihren Code

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

Das QueryPerformanceCounter Funktion ruft den aktuellen Wert des hochauflösenden Leistungszählers ab. Durch Aufrufen dieser Funktion am Anfang und Ende eines Codeabschnitts verwendet eine Anwendung den Zähler als hochauflösenden Timer.

Die Genauigkeit hochauflösender Timer liegt bei einigen hundert Nanosekunden. Eine Nanosekunde ist eine Zeiteinheit, die 0,000000001 Sekunden oder 1 Milliardstel Sekunde darstellt.

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

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

TStopWatch misst die verstrichene Zeit durch Zählen der Timer-Ticks im zugrunde liegenden Timer-Mechanismus.

  • Das IsHighResolution Die Eigenschaft gibt an, ob der Timer auf einem hochauflösenden Leistungsindikator basiert.
  • Das Start Die Methode beginnt mit der Messung der verstrichenen Zeit.
  • Das Halt Methode stoppt die Messung der verstrichenen Zeit.
  • Das Verstrichene Millisekunden Eigenschaft erhält die insgesamt verstrichene Zeit in Millisekunden.
  • Das Abgelaufen Eigenschaft erhält die insgesamt verstrichene Zeit in Timer-Ticks.

Hier ist ein Anwendungsbeispiel: