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).
Jen pro úplnost: sem tam stačí časová náročnost zjistit jen za pomocí API volání GetTickCount (v .NET je to zapouzdřené) 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.
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 a pro .NET - nProf (starší verze 0.9, má ale někdy problém s .NET2).
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, pro .NET si nejsem jistý, ale prý nProf (novější verze 0.10).
Kterou variantu použijete je jen na vás.