Delphi - Egyes forráskód részletek végrehajtási idejének mérése

forráskód letöltése
Ha fejleszt egy programot, akkor bizony néha jól jönne egy olyan komponens, melynek segítségével megmérhetné, hogy az egyes ciklusok, eljárások, egyéb forráskód részletek mennyi idő alatt futnak le. Ez az információ hasznos lehet sok szempontból is. Például így meghatározható, hogy egy-egy funkció a programunk mely részén a leglassabb, hol van az a kód részlet, melyhez a legtöbb időre van szüksége a processzornak a végrehajtáshoz. Ha ismerjük ezeket a gyenge pontokat a forráskódjainkban, akkor megpróbálhatjuk optimalizálni azokat, hogy egy gyorsabb program jöjjön létre.

Mellékelt példában egy ilyen komponenst készítünk, amely a gép hardverétől függően, akár milliomod másodperc pontossággal is képes a méréseket elvégezni. A mellékelt példaprogram megnyitása előtt a Performance.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A fenti funkció megvalósításához újságunk idei első számában bemutatott "Az idő precíz mérése programból" című cikkben tárgyalt függvényeket használjuk fel.

A komponens funkciói két részre oszthatók.
Az első esetben lehetőségünk van arra, hogy mint egy stopperórát használva a komponenst, megmérjünk két időpont közt eltelt időt. A stopper indításához a Start eljárást kell meghívnunk, míg a leállításhoz a Stop függvényt.
A Stop függvény egy sztring típusú értéket ad vissza, ebből megtudhatjuk, hogy mennyi idő telt el a Start eljárás hívása óta.

Másik mérési módszer úgy működik, hogy a stoppert időnként megállítjuk, pontosabban összeadatjuk vele a mérendő rész eredményeket.

Így például egy cikluson belül képesek vagyunk megmérni a ciklusmagban található kód egy részének az összegzett futási idejét. Erre láthatunk példát a "Lista feltöltése véletlenszerű elemekkel" nyomógomb lenyomásakor futó kódnál.

Ennél a módszernél a StartAdd eljárással nullázhatjuk a számlálót. Majd a Start és az Add eljárás közötti időt összegzi a komponens egy belső számlálóba. Végül a StopAdd függvény ennek a számlálónak az értékét adja vissza szintén sztring típusban.