För rutinmässiga skrivbordsdatabasapplikationer gör sällan en skillnad för slutanvändare att lägga till en enda sekund till en uppgifts körningstid - men när du behöver bearbeta miljontals trädblad eller generera miljarder unika slumpmässiga nummer blir utföringshastigheten viktigare.
Tidtagning av din kod
I vissa applikationer är mycket noggranna och högprecisionsmätningsmetoder viktiga och lyckligtvis Delphi ger en högpresterande räknare för att kvalificera dessa tider.
Med hjälp av RTL Nu Fungera
Ett alternativ använder Nu fungera. Nu, definierat i SysUtils enhet, returnerar det aktuella systemdatumet och tiden.
Några koderader räknade tiden mellan "start" och "stopp" för någon process:
Nu-funktionen returnerar det aktuella systemdatumet och tiden som är exakt upp till 10 millisekunder (Windows NT och senare) eller 55 millisekunder (Windows 98).
För mycket små intervall räcker det ibland inte med noggrannhet.
Använda Windows API GetTickCount
För ännu mer exakta data, använd GetTickCount
Windows API fungera. GetTickCount hämtar antalet millisekunder som har gått sedan systemet startades, men funktionen har bara precisionen på 1 ms och kanske inte alltid är korrekt om datorn förblir påslagen under långa perioder tid.Den förflutna tiden lagras som ett DWORD-värde (32-bitars). Därför kommer tiden att sträcka sig till noll om Windows körs kontinuerligt under 49,7 dagar.
GetTickCount är också begränsad till systemtimerns noggrannhet (10/55 ms).
Högprecisionstimering av din kod
Om din PC stöder en högupplösningsprestandräknare, använd QueryPerformanceFrequency Windows API-funktion för att uttrycka frekvensen, i räkningar per sekund. Räknarnas värde är beroende av processor.
De QueryPerformanceCounter -funktionen hämtar det aktuella värdet på högupplösningsprestandräknaren. Genom att anropa denna funktion i början och slutet av ett kodavsnitt använder en applikation räknaren som en högupplösande timer.
Noggrannheten för högupplösta timers är cirka några hundra nanosekunder. Ett nanosekund är en tidsenhet som representerar 0,000000001 sekunder - eller 1 miljarddels sekund.
TStopWatch: Delphi Implementering av en högupplösande räknare
Med en nick till .Net namnge konventioner, en räknare som TStopWatch erbjuder en högupplöst Delphi-lösning för exakta tidsmätningar.
TStopWatch mäter förfluten tid genom att räkna timerfästingar i den underliggande timermekanismen.
- De IsHighResolution Egenskapen indikerar om timern är baserad på en högupplösande prestandaräknare.
- De Start metoden börjar mäta förfluten tid.
- De Sluta metoden slutar mäta förfluten tid.
- De ElapsedMilliseconds fastigheten får den totala förflutna tiden i millisekunder.
- De förfluten Egenskapen får den totala förflutna tiden i timer-fästingar.
Här är ett exempel på användning: