A szokásos asztali adatbázis-alkalmazások esetében egy másodperc hozzáadása a feladat végrehajtási idejéhez ritkán eredményez különbséget a végfelhasználók számára, de ez mégis fontos amikor több millió falevelet kell feldolgoznia, vagy milliárd egyedi véletlen számot kell előállítania, a végrehajtás sebessége fontosabbá válik.
A kód időzítése
Egyes alkalmazásokban nagyon pontos és nagy pontosságú időmérési módszerek fontosak és szerencsére Delphi nagy teljesítményű számlálót kínál ezeknek az időknek a minősítéséhez.
RTL-ek használata Most Funkció
Az egyik lehetőség a Most funkció. Most, amelyet a SysUtils egység, az aktuális rendszer dátumát és időpontját adja vissza.
Néhány sornyi kódmérés eltelt egy idő "indulása" és "leállítása" között:
A Most funkció visszaadja a rendszer aktuális dátumát és időpontját, amely pontosan akár 10 milliszekundum (Windows NT vagy újabb) vagy 55 milliszekundum (Windows 98) lehet.
Nagyon kis időközönként a "Most" pontossága néha nem elég.
A Windows API GetTickCount használata
A még pontosabb adatokhoz használja a GetTickCountWindows API funkció. GetTickCount lekérdezi a rendszer indítása óta eltelt ezredmásodperceket, de a funkciónak csak ez van 1 ms pontossággal, és nem mindig pontos, ha a számítógép hosszú ideig bekapcsolt állapotban van idő.
Az eltelt időt DWORD (32 bites) értékként tárolja. Ezért az idő nullára esik, ha a Windows folyamatosan 49,7 napig fut.
GetTickCount a rendszeridő pontosságára is korlátozódik (10/55 ms).
Nagy pontosságú időzítése a kódjának
Ha a számítógép támogatja a nagy felbontású teljesítményszámlálót, akkor használja a QueryPerformanceFrequency A Windows API funkció a frekvencia kifejezéséhez másodpercenként. A gróf értéke processzorfüggő.
Az QueryPerformanceCounter funkció lekérdezi a nagy felbontású teljesítményszámláló aktuális értékét. Ha meghívja ezt a funkciót a kódrészlet elején és végén, az alkalmazás nagy felbontású időzítőként használja a számlálót.
A nagy felbontású időzítők pontossága körülbelül néhány száz nanosekundum. A nanoszekundum egy időegység, amely 0.000000001 másodperc - vagyis a másodperc egymilliárd részét képviseli.
TStopWatch: Nagyfelbontású számláló Delphi megvalósítása
Bólintva a .Net elnevezési konvenciókhoz, például egy számláló TStopWatch nagy felbontású Delphi megoldást kínál a pontos időméréshez.
A TStopWatch az eltelt időt méri az időzítő kullancsok számításával az alapul szolgáló időzítő mechanizmusban.
- Az IsHighResolution tulajdonság azt jelzi, hogy az időzítő nagy felbontású teljesítményszámlálón alapul-e.
- Az Rajt A módszer megkezdi az eltelt idő mérését.
- Az Állj meg módszer leállítja az eltelt idő mérését.
- Az ElapsedMilliseconds tulajdonság megkapja az összes eltelt időt milliszekundumban.
- Az Eltelt tulajdonság megkapja az összes eltelt időt időzítő kullancsokban.
Íme egy példa a felhasználásra: