W przypadku rutynowych aplikacji bazodanowych dodawanie jednej sekundy do czasu wykonania zadania rzadko stanowi różnicę dla użytkowników końcowych - ale gdy trzeba przetworzyć miliony liści drzew lub wygenerować miliardy unikatowych liczb losowych, szybkość wykonywania staje się ważniejsza.
Przekroczono limit czasu Twojego kodu
W niektórych aplikacjach bardzo dokładne i bardzo precyzyjne metody pomiaru czasu są ważne i na szczęście Delfy zapewnia wysoce wydajny licznik, aby zakwalifikować się do tych czasów.
Korzystanie z RTL Teraz Funkcjonować
Jedna opcja wykorzystuje Teraz funkcjonować. Teraz, zdefiniowane w SysUtils jednostka zwraca bieżącą datę i godzinę systemową.
Kilka linii kodu mierzy czas, który upłynął między „rozpoczęciem” i „zatrzymaniem” jakiegoś procesu:
Funkcja Now zwraca bieżącą datę i godzinę systemową z dokładnością do 10 milisekund (Windows NT i nowszy) lub 55 milisekund (Windows 98).
W bardzo małych odstępach czasami precyzja „Teraz” nie wystarcza.
Korzystanie z interfejsu API Windows GetTickCount
Aby uzyskać jeszcze bardziej precyzyjne dane, użyj GetTickCountWindows API funkcjonować. GetTickCount pobiera liczbę milisekund, które upłynęły od uruchomienia systemu, ale funkcja ma tylko dokładność 1 ms i nie zawsze może być dokładna, jeśli komputer pozostaje włączony przez długi czas czas.
Upływający czas jest zapisywany jako wartość DWORD (32-bit). Dlatego czas będzie się zmniejszał do zera, jeśli system Windows będzie działał nieprzerwanie przez 49,7 dni.
GetTickCount jest również ograniczona do dokładności timera systemowego (10/55 ms).
Wysoka precyzja wygasza Twój kod
Jeśli twój komputer obsługuje licznik wydajności wysokiej rozdzielczości, użyj QueryPerformanceFrequency Funkcja Windows API do wyrażania częstotliwości, w liczbie na sekundę. Wartość liczby zależy od procesora.
The QueryPerformanceCounter funkcja pobiera bieżącą wartość licznika wydajności o wysokiej rozdzielczości. Wywołując tę funkcję na początku i na końcu części kodu, aplikacja używa licznika jako timera o wysokiej rozdzielczości.
Dokładność timerów o wysokiej rozdzielczości wynosi około kilkuset nanosekund. Nanosekunda to jednostka czasu reprezentująca 0,000000001 sekundy - lub 1 miliardową sekundę.
TStopWatch: Implementacja Delphi licznika o wysokiej rozdzielczości
Z ukłonem do konwencji nazewnictwa .Net, licznik podobny TStopWatch oferuje rozwiązanie Delphi o wysokiej rozdzielczości do precyzyjnych pomiarów czasu.
TStopWatch mierzy upływ czasu, zliczając tyknięcia zegara w leżącym u jego podstaw mechanizmie zegara.
- The IsHighResolution właściwość wskazuje, czy licznik czasu jest oparty na liczniku wydajności o wysokiej rozdzielczości.
- The Początek metoda rozpoczyna pomiar upływającego czasu.
- The Zatrzymać metoda przestaje mierzyć upływ czasu.
- The ElapsedMilliseconds Właściwość pobiera całkowity czas, który upłynął w milisekundach.
- The Upłynęło właściwość pobiera całkowity czas, który upłynął w tyknięciu zegara.
Oto przykład użycia: