Įprastinėms darbastalio duomenų bazių programoms pridėjus vieną sekundę užduoties vykdymo laiką, galutiniams vartotojams tai būna skirtinga, tačiau kai reikia apdoroti milijonus medžio lapų arba sugeneruoti milijardus unikalių atsitiktinių skaičių, vykdymo greitis tampa svarbesnis.
Laiko nustatymas
Kai kuriose programose labai tikslūs, labai tikslūs laiko matavimo metodai yra svarbūs ir, laimei Delfi teikia aukšto našumo skaitiklį, kad atitiktų šiuos laikus.
Naudojant RTL Dabar Funkcija
Viena parinktis naudoja Dabar funkcija. Dabar, apibrėžta „SysUtils“ vienetas, grąžina esamą sistemos datą ir laiką.
Kelios kodo matavimo eilutės praėjo nuo kai kurių procesų pradžios ir pabaigos.
Funkcija Dabar grąžina dabartinę sistemos datą ir laiką, kurie tikslūs iki 10 milisekundžių („Windows NT“ ir naujesnės versijos) arba 55 milisekundės („Windows 98“).
Labai nedideliais laiko tarpais kartais nepakanka „Dabar“ tikslumo.
Naudojant „Windows“ API „GetTickCount“
Norėdami gauti dar tikslesnius duomenis, naudokite
„GetTickCount“„Windows“ API funkcija. „GetTickCount“ nuskaito milisekundžių, praėjusių nuo sistemos paleidimo, skaičių, tačiau funkcija turi tik 1 ms tikslumu ir ne visada gali būti tikslus, jei kompiuteris ilgą laiką yra maitinamas laikas.Praėjęs laikas saugomas kaip DWORD (32 bitų) reikšmė. Todėl laikas bus apytiksliai lygus nuliui, jei „Windows“ veiks nepertraukiamai 49,7 dienos.
„GetTickCount“ taip pat apsiriboja sistemos laikmačio tikslumu (10/55 ms).
Labai tikslus jūsų kodo nustatymas
Jei jūsų kompiuteris palaiko didelės skiriamosios gebos skaitiklį, naudokite „QueryPerformanceFrequency“ „Windows API“ funkcija išreikšti dažnį, skaičiuojant per sekundę. Skaičiavimo vertė priklauso nuo procesoriaus.
„QueryPerformanceCounter“ funkcija nuskaito dabartinę didelės skiriamosios gebos skaitiklio vertę. Paskambinusi šiai funkcijai kodo skyriaus pradžioje ir pabaigoje, programa naudoja skaitiklį kaip didelės skiriamosios gebos laikmatį.
Aukštos skyros laikmačių tikslumas yra apie kelis šimtus nanosekundžių. Nanosekundė yra laiko vienetas, atstovaujantis 0,000000001 sekundę - arba 1 milijardą sekundės.
„TStopWatch“: Didelės raiškos skaitiklio įgyvendinimas „Delphi“
Su linktelėjimu prie .Net įvardijimo konvencijų, skaitiklis patinka „TStopWatch“ siūlo aukštos skiriamosios gebos „Delphi“ sprendimą tiksliam laiko matavimui.
„TStopWatch“ išmatuoja praėjusį laiką skaičiuodamas laikmačio erkes pagrindiniame laikmačio mechanizme.
- „IsHighResolution“ nuosavybė nurodo, ar laikmatis pagrįstas aukštos skiriamosios gebos skaitikliu.
- Pradėti metodas pradeda matuoti praleistą laiką.
- Sustabdyti metodas sustabdo praleisto laiko matavimą.
- Prabėgo milisekundės nuosavybė gauna visą praleistą laiką milisekundėmis.
- Praėjo nuosavybė gauna visą praleistą laiką laikmačio erkėse.
Štai naudojimo pavyzdys: