GeoGet

Complete geocaching solutions

User Tools

Site Tools


user:skript:profile

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

Nainstalovat do GeoGetu
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 .
Kliknuli jste na tlačítko a nic se nestalo? Máte opravdu spuštěný GeoGet ? Je to potřeba! Nebo možná máte zastaralý webový prohlížeč. Nevadí, instalaci doplňku můžete jednoduše vyvolat i prostým zkopírováním (označit text → klik pravým tlačítkem → kopírovat) následujícího odkazu do schránky: https://www.geoget.cz/doku.php/user:skript:profile?download

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í

FilenameFilesizeLast modified
profile-1.0.1.gip7.4 KiB2014/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í

:?: Zobrazit změny ve starších verzích

Skrýt změny ve starších verzích

1.0.0

  • úvodní verze
user/skript/profile.txt · Last modified: 2019/06/13 20:08 by mikrom