Table of Contents
Profile
Knihovna poskytuje nástroj na hledání funkcí vhodných ke zrychlení. Poskytuje přehled všech profilovaných funkcí a uvedeným časem, který byl prováděním funkce stráven.
Autor
Pokud se Vám doplněk líbí, kliknutím na tlačítko Donate můžete přispět na jeho vývoj. |
Automatická instalace
|
Instalaci doplňku spustíte kliknutím na tlačítko vlevo. Následně budete v prostředí GeoGetu provedeni instalačním procesem. Pro zajištění této funkce je třeba mít na počítači již
nainstalovaný a
spuštěný program GeoGet
.
|
Proč knihovnu používat a jak?
Proč knihovna existuje?
Podle programátorského folkloru obsahuje každý program nějaký zbytečný příkaz, tedy něco, co zpomaluje jeho práci. Tato knihovna má za úkol poskytnout programátorovi přehled o tom, kde (v které funkci) stráví skript nejvíc času a kam tedy zaměřit svou pozornost při hledání cesty na jeho urychlení. Rozhodně knihovna neodpoví na otázku který z příkazů je zbytečný a jak použitý algoritmus zrychlit. Tuto bohulibou činnost knihovna ponechává na autorovi skriptu.
Co knihovna dělá?
Knihovna shromažďuje informace o skriptem použitých funkcích a čase, který provádění každé funkce trvalo. Ačkoli tu hovoříme o funkcích, nic nebrání takto vyhodnocovat jen některé části funkcí.
Jak knihovnu použít?
Knihovna obsahuje 2 funkce, mezi jejichž zavoláním je měřen čas. Ukážeme to na příkladu.
//definujeme promennou, pomoci ktere zapiname/vypiname pouziti knihovny {$define PROFILER} //vlozime knihovnu jako Unit, napr. pri pouziti formularu uses Form1, Form2 {$ifdef PROFILER},ProfileUnit{$endif}; //nebo ji vlozime pomoci prikazu include {$ifdef PROFILER} {$I Profile.lib.pas} {$endif}; procedure A; begin //zahajeni mereni casu {$ifdef PROFILER} ProfileStart('A'); {$endif}; //vlastni vykonne telo funkce //... //zavolame vnorenou funkci B(); //... //ukonceni mereni casu {$ifdef PROFILER} ProfileStop(); {$endif}; end; procedure B; begin //zahajeni mereni casu {$ifdef PROFILER} ProfileStart('B'); {$endif}; //vlastni vykonne telo funkce //... //ukonceni mereni casu {$ifdef PROFILER} ProfileStop(); {$endif}; end;
Knihovní funkce ProfileStart(string)
má jako parametr identifikační řetězec měřeného místa. Nejčastěji použijeme přímo jméno funkce, kterou proměřujeme, ale není to nezbytně nutné.
Pro spuštění každé funkce ProfileStart()
musí existovat její protějšek ProfileStop()
a pokud dojde ke spuštění Startu, musí dojít i ke spuštění funkce Stop.
Toto je důležité mít na paměti zejména v místech, kde může dojít k předčasnému ukončení funkce příkazem exit
nebo k vynechání nějaké části třeba bloku try
. V takovém případě bude pravděpodobně nutných několik volání funkce ProfileStop()
.
procedure C; begin {$ifdef PROFILER} ProfileStart('C'); {$endif}; //vlastni vykonne telo funkce //... if(i=1) then begin {$ifdef PROFILER} ProfileStop(); {$endif}; exit; end; //... {$ifdef PROFILER} ProfileStop(); {$endif}; end;
Aby nám to měření k něčemu bylo, potřebujeme také zobrazit výsledek. To uděláme většinou na konci skriptu zavoláním další knihovní funkce
{$ifdef PROFILER} var aProfile:TStrings; {$endif} ... {$ifdef PROFILER} aProfile:=ProfileResults(); ProfileHtmlOutput(aProfile,true); aProfile.Free(); {$endif}
ProfileHtmlOutput()
vytváří HTML výstup, prvním parametrem je seznam stringů se zobrazovanými daty (ten poskytne funkce ProfileResult()
) a druhým parametrem je příznak, zda má být vytvořený HTML soubor hned zobrazen v browseru.
Výsledek pak může vypadat třeba takto:
Stažení
Stáhnout aktuální verzi: profile-1.0.1.gip
Seznam dostupných verzí
Filename | Filesize | Last modified |
---|---|---|
profile-1.0.1.gip | 7.4 KiB | 2014/12/29 00:00 |
Seznam změn
1.0.1 (22.12.2014)
- doplněna kontrola překročení zásobníku a hloubky zanoření
- doplněn výpis vrchu zásobníku při překročení maximálního zanoření