Suorituskykyinen ajastin Delphissä

Rutiinitietokantatietokantaohjelmissa yhden sekunnin lisääminen tehtävän suorittamisaikaan vaikuttaa harvoin loppukäyttäjiin - mutta kun joudut käsittelemään miljoonia puun lehtiä tai tuottamaan miljardeja yksilöllisiä satunnaislukuja, suoritusnopeudesta tulee tärkeämpi.

Koodisi ajoittaminen

Joissakin sovelluksissa erittäin tarkat, erittäin tarkkoja ajanmittausmenetelmät ovat tärkeitä ja onneksi Delfoi tarjoaa korkean suorituskyvyn laskurin näiden aikojen karsimiseksi.

RTL: ien käyttö Nyt Toimia

Yksi vaihtoehto käyttää Nyt toimia. Nyt, määritelty SysUtils yksikkö, palauttaa nykyisen järjestelmän päivämäärän ja kellonajan.

Muutaman koodirivin kulunut aika jonkin prosessin "käynnistyksen" ja "lopetuksen" välillä:

Nyt-toiminto palauttaa nykyisen järjestelmän päivämäärän ja ajan, joka on tarkka jopa 10 millisekuntia (Windows NT ja uudemmat) tai 55 millisekuntia (Windows 98).

Hyvin pienillä aikaväleillä "Nyt" -tarkkuus ei toisinaan riitä.

Windows API GetTickCount -sovelluksen käyttö

Jos haluat vielä tarkempia tietoja, käytä

instagram viewer
GetTickCountWindows-sovellusliittymä toimia. GetTickCount hakee järjestelmän käynnistämisen jälkeen kuluneiden millisekuntien määrän, mutta toiminnolla on vain tarkkuus 1 ms, eikä se välttämättä aina ole tarkka, jos tietokone on käynnissä pitkään aika.

Kulunut aika tallennetaan DWORD-arvoksi (32-bittinen). Siksi aika kääntyy nollaan, jos Windowsia käytetään jatkuvasti 49,7 päivän ajan.

GetTickCount on myös rajoitettu järjestelmän ajastimen tarkkuuteen (10/55 ms).

Suuri tarkkuus ajoittaa koodisi

Jos tietokoneesi tukee korkearesoluutioista suorituskykylaskuria, käytä QueryPerformanceFrequency Windows API -toiminto ilmaisee taajuuden, laskettuna sekunnissa. Laskennan arvo riippuu prosessorista.

QueryPerformanceCounter -toiminto hakee korkean resoluution suorituskykylaskurin nykyisen arvon. Soittamalla tähän toimintoon koodiosan alussa ja lopussa sovellus käyttää laskuria korkean resoluution ajastimena.

Korkean resoluution ajastimien tarkkuus on noin muutama sata nanosekuntia. Nanosekuntia on aikayksikkö, joka edustaa 0,000000001 sekuntia - tai 1 miljardia sekuntia.

TStopWatch: Korkean resoluution laskurin Delphi-toteutus

Kun nyökkäys .Net-nimityssopimuksiin, laskuri kuten TStopWatch tarjoaa korkearesoluutioisen Delphi-ratkaisun tarkkoihin ajan mittauksiin.

TStopWatch mittaa kuluneen ajan laskemalla ajastinpisteitä ajastinmekanismiin.

  • IsHighResolution ominaisuus ilmaisee, perustuuko ajastin korkean resoluution suorituskykylaskuriin.
  • alkaa menetelmä aloittaa kuluneen ajan mittaamisen.
  • Lopettaa menetelmä lopettaa kuluneen ajan mittauksen.
  • ElapsedMilliseconds omaisuus saa kokonaisen kuluneen ajan millisekunnina.
  • kulunut omaisuus saa kokonaisen kuluneen ajan ajastinpisteissä.

Tässä on esimerkki käytöstä:

instagram story viewer