Profiler kódu pro Delphi

vložil Radek Červinka 6. prosince 2009 22:11

Profilery kódu nejsou moc často používanou pomůckou, ale někdy pomohou velmi výrazně zrychlit běh programu.

Zjednodušeně řečeno je profiler nástroj, který po dobu běhu programu zjišťuje informace o době trvání běhu jednotlivých částí programu a následně po ukončení běhu tyto statistiky zobrazí.

Existují (pokud vím) dva druhy profilerů: instrumentační a vzorkovací (samplovací).

Kdy použít profiler? Jednoduše když máte pocit, že by váš program mohl běžet rychleji. Někdy pak stačí malá změna ve výsledném kódu (např. odstranění zbytečného volání funkce, použitím nějaké cache nebo odstranění opětovného vyhodnocování špatně udělané property tím, že si zapamatujete její hodnotu) a výsledný kód běží rychleji a uživatel to ocení.

Jen pro úplnost: sem tam stačí časová náročnost zjistit jen za pomocí API volání GetTickCount před a po kritické části. Toto lze ovšem použít jen pro jednoduché případy, v ostatních případech je lepší použít profiler (hlavně když přesně není jasné která část zpomalení způsobuje).

Instrumentační profiler

Principem činnosti je modifikace programu, tak aby byla volána v určitých definovaných místech funkce profileru. Toto volání může být implementováno buďto změnami ve zdrojovém kódu nebo změnami ve výsledném kódu.

V každém případě je ovlivněn výkon aplikace, ale na druhou stranu programátor může přesně specifikovat co chce profilovat a má přesnou informaci o tom kolikrát byla ta která část kódu vyvolávána a kolik času to trvalo (a kolik z celkové doby to zabralo).

Znám několik volně dostupných instrumentačních profilerů, pro Delphi se jedná o gpprofile , proDelphi.

Vzorkovací (samplovací) profiler

Na rozdíl od předchozího tento typ nepotřebuje úpravu zdrojového kódu, běží jako jiná aplikace a periodicky se dívá do sledovaného procesu, která část kódu právě běží.

Už z popisu jsou jasné výhody a nevýhody, ale přesto: výhodou je profilace i části od kterých nemáte kód včetně systému, nezpomaluje se provádění kódu voláním profileru a profilování může být dlouhodobé (tj. třeba i celý level hry atd.).

Nevýhodou je, že nemáte informaci o všech částech, kde program běžel (pokud se stihl kód provést mezi vzorky).

Pro delphi je ideální SamplingProfiler.

Kterou variantu použijete je jen na vás, já poslední dobou používám je vzorkovací profiler.

Sampling Profiler

Podporuje Delphi 5 až Delphi 2009 (2010 asi taky). Je dobré přeložit testovanou aplikaci s TD32, JCL debug informacemi, popř. s map soubory aby měl program co nejvíce informací.

Sampling Profiler

Úvodní konfigurace

A výsledek může být třeba tento

Sampling Profiler

Pěknou vlastností je zobrazování minulých měření

Sampling Profiler

Od verze 1.70 umožňuje sampling profiler realtime sledování pomocí vestavěného http serveru - viz. konfigurační dialog - zobrazení pak provedete přes http://localhost:880/.

Tagy: , , ,

Praxe

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32 a Win64 (a Mac OSX a na iPhone a s výhledem na Android a další platformy díky FireMonkey) na současném trhu (včetně Windows 7).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa


Poslední komentáře

Comment RSS