Delphi

Úvodem

Úvodem  |  Soubory ke stažení

 

Dnes se podíváme na program ProDelphi, prohodíme pár slov o novince v Delphi 9, přidáme k dobru dvě internetové adresy a opět něco pro zasmání.

ProDelphi - program pro urychlení vašich programů.

Již dlouhou dobu se v komponentách a nástrojích pro Delphi objevuje program ProDelphi. Naposledy ve verzi 15.9 v dnešním výběru. Program je určen k detailnímu prozkoumání programů v Delphi a nalezení "úzkých" míst programu.

V dobách, kdy byly počítače pomalejší a měly k dispozici méně paměti, bylo důležité si dobře rozmyslet koncepci programu jak s hlediska rychlosti, tak i s hlediska optimalizace délky kódu. Při dnešních možnostech PC se tyto aspekty prakticky vytrácí ze zřetele a je nutné na ně brát ohled jen u určitých kategorií programů. Pokud programujete profesionálně, určitě se setkáte s nutností naprogramovat nějaký program z kategorie, kde záleží na rychlosti výpočtu. Může to být nějaká iterace, často využívaná uložená procedura na databázovém serveru či nějaká úplně jiná aplikace. Pokud budete chtít urychlit zpracování a nalézt místa, kterými prochází algoritmus často, a případně nalézt místa, která program zdržují, pak může být program ProDelphi tím pravým nástrojem, který potřebujete.

Výhodou použití tohoto programu je skutečnost, že po jeho instalaci vám k výše zmíněným zjištěním stačí vložit jen jeden jediný řádek - direktivu překladače {$PROFILE}. Všechno ostatní za vás udělá výše zmíněný program.

Pokud se rozhodnete pro jeho použití, stačí rozpakovat archiv do nějakého adresáře a poté buď spustit program setup.exe, který umístí některé dll knihovny a unity, potřebné pro zpracování do potřebných adresářů nebo to můžete provést ručně podle návodu v přiložené pdf-příručce.

Pokud chcete tedy otestovat váš program, stačí pro začátek provést následující kroky:

  1. Vložte do projektu výše zmíněnou direktivu {$PROFILE}.
  2. Vypněte všechny optimalizační přepínače a breakpointy.
  3. Použijte tlačítko "Ulož vše", což zajistí vytvoření souboru "*.DOF".
  4. Spusťte program ProDelphi - viz obrázek 1
  5. Pokud máte instalováno více verzí Delphi, vyberte z nabídky tu, s níž chcete pracovat a dále zadejte nebo vyberte testovaný projekt (tlačítko "Select project").
  6. Stiskněte tlačítko "Profile"
Po 6. kroku program vloží na začátek a konec každé procedury vašeho projektu sekvence příkazů, zajišťujících sběr požadovaných informací - viz následující úsek výpisu - vložené příkazy jsou zřejmé:

...
...
Procedure PripravCRC;
  {-------------------}
  begin
{$IFDEF PROFILE}asm DW 310FH; call Profint.ProfStop; end; Try; asm mov edx,12 or $7FDC0000; 
                mov eax,self; call Profint.ProfEnter; mov ecx,eax; DW 310FH; add[ecx].0,eax; 
				adc[ecx].4,edx; end; {$ENDIF}
    GetMem(P,LenA);
    BlockRead(FA,P^,LenA,Skut);
    PomCRC:=MakeCRC(P,LenA);
    FreeMem(P,LenA);
{$IFDEF PROFILE}finally; asm DW 310FH; mov ecx,12; call Profint.ProfExit; mov ecx,eax; 
                DW 310FH; add[ecx].0,eax; adc[ecx].4,edx; end; end; {$ENDIF}
  end;
...
...

Ale nemusíte se obávat, po ukončení testů můžete program požádat a ten po sobě opět "uklidí" a všechny vložené příkazy vymaže (viz záložku "Clean sources"). Nicméně "chibyčka" se může vloudit a tak si samozřejmě před testováním vytvořte zálohu.

prodel1

Obr. 1

Sám program se vás po provedení 6. kroku zeptá, zda máte zálohu provedenu - viz obr. 2.

Obr.2

No a pak již zbývá jen přeložit a spustit váš testovaný projekt. Během práce programu se vytváří několik souborů s informacemi v CSV tvaru. Tyto výsledky si buď můžete přečíst přímo nebo natáhnout třeba do Excelu, ale asi z nich nebudete moc moudří (alespoň zpočátku, později třeba naleznete vlastní vhodnou interpretaci), takže doporučuji vyvolat zabudovaný prohlížeč (viz obr. 3 - tlačítko "Load and view"),

Obr. 3

který vám z uložených dat vytáhne skutečně asi vše, co lze poskytnout - viz obr. 4 a 5. Například na obr. 5 vidíte základní výsledné informace tříděné dle unit, tříd a metod, procedur a funkcí.

Obr. 4

Obr. 5

V jednotlivých sloupcích pak jsou počty průchodů, procento času z běhu programu i absolutní doba spotřebovaná rutinou samotnou či rutinou včetně podprogramů. A to je samozřejmě jen zlomek z mnoha dalších informací, které program poskytuje. Informace z jednotlivých testovacích běhů si můžete ukládat a poté porovnávat účinnost vašich změn. Číslo uložené verze informací je v prvním sloupci tabulky. Tabulka může být setříděna dle libovolného sloupce, stačí poklepat na hlavičku sloupce. Pokud zaškrtnete před 6. krokem na formuláři pole "Generate data for call graphs", pak pokud poklepete na název rutiny ve výsledné tabulce, získáte grafické zobrazení struktury volání nadřízených a podřízených rutin (viz obr. 6) včetně časových údajů.

Obr. 6

V tabulce můžete vyfiltrovat jen údaje požadované unity, třídy či přímo konkrétní rutiny pomocí zadaných filtrů na formuláři, nebo si můžete zobrazit tlačítkem "Browser" celý strom projektu (obr. 7) a poklepáním definovat požadovaný filtr.

Obr. 7

Další možností je zobrazení nepoužitých rutin tlačítkem "Not called Methods" (obr. 8).

Obr. 8

Tímto stručným přehledem je vyčerpán jen zlomek možností programu. Program umí například i vypsat informace po havárii programu, umí testovat i assemblerovské úseky a mnoho dalšího.

Dodejme ještě jen, že k dispozici je i verze pro Delphi 8 a dále, že ve freeware verzi provádí program test a výpis informací max. dvaceti rutin. Pokud si program zakoupíte, dokáže program zpracovat až 32000 rutin, což by mělo stačit pro většinu vašich programů :-).



První zprávy o Delphi 9.

V době tisku tohoto čísla bude zřejmě známo podstatně více informací o další verzi Delphi. V současné době proskočila na internetu informace o nové konstrukci cyklu "for..in", která odpovídá konstrukcím "for each" v některých jiných jazycích. Syntaxe příkazu má tvar:

for <variable> in <container expression> do <statement>;

Zde proměnná <variable> je lokální proměnná stejného typu jako data v kontrejneru a <container expression> je výraz implementující buď interface IEnumerable nebo výraz chápe kompilátor jako enumerátor nebo jako kontejner datových položek. Příkladem může být třeba StringCollection, pole (i vícerozměrné) nebo množina.

Cyklus pak bude vypadat třeba takto:

type
  TBarva=(cervena, modra, zluta, bila, cerna , oranzova);
  TBarvy = set of TBarva;
 
procedure Priklad(const Vybarveni: TBarvy);
{=========================================}
var
  B: TBarva;
begin
  for B in Vybarveni do KresliKolo(B);
end; 


Odkazy

Dnešní odkazy jsou jen stručné a oba se týkají databází Interbase a FireBird:

http://www.devrace.com/en/download.php

http://www.interbase-world.com/en/index.php

Na stránkách najdete jak řadu informací a návodů, tak i mnoho materiálu ke stažení.



Závěrem

Připojení myši k počítači je docela snadné:



Chápání rychlosti počítačů může být skutečně relativní:

Vyhrál jste sázku. Vaše Pentium bylo rychlejší než moje.



Utiskuje vás také v práci šéf nebo kolega?

Nenechte si to líbit, přejděte k naší firmě, u nás je míst dost:

 

Jiří Ventluka