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í.
Úvodní konfigurace
A výsledek může být třeba tento
Pěknou vlastností je zobrazování minulých měření
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/.