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.
Pokud se Vám doplněk líbí, kliknutím na tlačítko Donate můžete přispět na jeho vývoj. |
![]() |
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
.
|
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.
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í.
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:
Stáhnout aktuální verzi: profile-1.0.1.gip
Filename | Filesize | Last modified |
---|---|---|
profile-1.0.1.gip | 7.4 KiB | 2014/12/29 00:00 |
1.0.1 (22.12.2014)
Zobrazit změny ve starších verzích
Skrýt změny ve starších verzích
1.0.0