Přeskoč navigaci

Profilery kódu

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).

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.

Jaggni to|Linkuj

Komentáře k tomuto článku



Prosím o dodržovaní určitých pravidel (tj. žádné neslušné texty, reklamy a tak prostě podobně). Komentáře porušující tyto pravidla budou odstraněny.

Před vložením komentáře je nutno provést náhled, jedná se o ochranu proti spamu.

 

Vložení komentáře
  
 
 

 

© NetCode.cz, 2006-9 | Všechna práva vyhrazena
Provozováno na mém pikoCMS, vygenerováno: 27.5.2017 12:14:58

O mně

Informace o mé maličkosti a kontakt.

Lokální tagy

amd(1) amiga(1) apple(1) aspnet(2) audio(1) borland(5) C64(1) codegear(12) delphi(39) dotnet(9) dvd(1) electone(1) embarcadero(1) emulator(11) firebird(2) flash(1) freepascal(5) gamecube(3) gigabyte(2) google(3) hardware(48) holografie(1) homebrew(29) hry(12) ibm(14) iphone(7) jidlo(1) komponenty(1) konzole(15) latex(1) lenovo(17) migrace(1) modchip(3) moje(9) mplayer(3) mssql(1) multi-touch(3) native-api(1) navody(23) nintendo(53) Nintendo3DS(2) nintendo64(6) NintendoDS(15) onestation(2) opera(1) ot(1) palm(1) pascal(1) pdf(1) pic(2) pmd85(1) pocitace(1) print-server(2) programovani(21) programy(25) R400(1) recenze(6) retro(1) satelit(1) seamonkey(5) snes(3) svepomoci(1) technika(1) thinkpad(20) usb(1) video(3) vs(3) vykriky(12) web(7) webdesign(8) wii(83) wiimote(13) wiiware(1) wiki(2) windows(7) windows-mobile(1) wl500g(2) wtf(8) zivot(1) ZX-Spectrum(5)