![]() |
|
┌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:
... ... 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. ![]() 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; OdkazyDneÜnφ odkazy jsou jen struΦnΘ a oba se t²kajφ databßzφ Interbase a FireBird: Na strßnkßch najdete jak °adu informacφ a nßvod∙, tak i mnoho materißlu ke sta₧enφ. Zßv∞remP°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: ![]()
|
|