Augstas veiktspējas taimeris Delfos

Ikdienas darbvirsmas datu bāzes lietojumprogrammām vienas sekundes pievienošana uzdevuma izpildes laikam reti ietekmē gala lietotājus, taču kad jums jāapstrādā miljoniem koku lapu vai jāveido miljardiem unikālu izlases numuru, izpildes ātrums kļūst svarīgāks.

Koda pārtraukšana

Dažās lietojumprogrammās ļoti svarīgas un par laimi ir ļoti precīzas, augstas precizitātes laika mērīšanas metodes Delfi nodrošina augstas veiktspējas skaitītāju, lai kvalificētu šos laikus.

Izmantojot RTL Tagad Funkcija

Vienā variantā tiek izmantots Tagad funkcija. Tagad, kas definēts SysUtils vienība, atgriež pašreizējo sistēmas datumu un laiku.

Laiks starp dažu procesu "sākumu" un "apstāšanos" pagāja dažas koda mēra līnijas:

Funkcija Tagad atgriež pašreizējo sistēmas datumu un laiku, kas ir precīzs līdz 10 milisekundēm (Windows NT un jaunākas versijas) vai 55 milisekundēm (Windows 98).

Ļoti maziem intervāliem "Tagad" precizitāte dažreiz nav pietiekama.

Izmantojot Windows API GetTickCount

Lai iegūtu vēl precīzākus datus, izmantojiet

instagram viewer
GetTickCountWindows API funkcija. GetTickCount izgūst milisekunžu skaitu, kas pagājuši kopš sistēmas palaišanas, bet šai funkcijai ir tikai ar precizitāti 1 ms, un tā ne vienmēr var būt precīza, ja dators ilgu laiku ir ieslēgts laiks.

Pagājušais laiks tiek saglabāts kā DWORD (32 bitu) vērtība. Tāpēc laiks apstāsies līdz nullei, ja Windows darbosies nepārtraukti 49,7 dienas.

GetTickCount ir ierobežots arī ar sistēmas taimera precizitāti (10/55 ms).

Augsta precizitāte jūsu koda noteikšanai

Ja jūsu dators atbalsta augstas izšķirtspējas veiktspējas skaitītāju, izmantojiet QueryPerformanceFrequency Windows API funkcija, lai izteiktu frekvenci skaitļos sekundē. Skaitījuma vērtība ir atkarīga no procesora.

QueryPerformanceCounter funkcija izgūst augstas izšķirtspējas veiktspējas skaitītāja pašreizējo vērtību. Izsaucot šo funkciju koda sadaļas sākumā un beigās, lietojumprogramma izmanto skaitītāju kā augstas izšķirtspējas taimeri.

Augstas izšķirtspējas taimeru precizitāte ir aptuveni daži simti nanosekundi. Nanosekundē ir laika vienība, kas apzīmē 0.000000001 sekundes - vai sekundes vienu miljardo daļu.

TStopWatch: Delphi augstas izšķirtspējas skaitītāja ieviešana

Ar galvu .Net nosaukšanas konvencijas, skaitītājs patīk TStopWatch piedāvā augstas izšķirtspējas Delphi risinājumu precīziem laika mērījumiem.

TStopWatch mēra pagājušo laiku, saskaitot taimeru ērces pamata taimera mehānismā.

  • IsHighResolution rekvizīts norāda, vai taimera darbības pamatā ir augstas izšķirtspējas veiktspējas skaitītājs.
  • Sākt metode sāk izmērīt pagājušo laiku.
  • Pietura metode pārtrauc pagājušā laika mērīšanu.
  • PagājisMilisekundes īpašums iegūst kopējo pagājušo laiku milisekundēs.
  • Pagājis īpašums iegūst kopējo pagājušo laiku taimera ērcēs.

Šis ir lietošanas piemērs:

instagram story viewer