Optimalizace výkonu aplikací

I když dnes jsou pracovní stanice stále výkonnější a lze je pořídit za poměrně dobrou cenu, jako vývojáři byste neměli zcela zapomínat na to, aby byly Vaše aplikace co nejvýkonnější, potřebovaly co nejméně paměti a výkonu procesoru a nespotřebovávaly zbytečné místo na disku a v registrech. Zkusme se podívat na některé věci, které mohou výkon Vašich aplikací zvýšit.

1. První věcí je mít v aplikaci pouze ty věci, které aplikace skutečně potřebuje pro svůj běh. Mám na mysli především reference na různé knihovny. Pokud si v menu Projekt kliknete na odkaz References, dostanete okno s výpisem všech možných referencí, na které se Vaše aplikace může odkazovat. Ty, na které se skutečně odkazuje jsou zaškrtnuty. Pro běh Vaší aplikace bude vždy potřebovat následující:

Visual Basic For Applications
Visual Basic Runtime Objects And Procedures
Visual Basic Objects And Procedures
OLE Automation

Tyto reference na knihovny by měly být vždy zaškrtnuty:

2. Pokud používáte pouze jeden nebo dva prvky z Microsoft Common Controls, zkuste si je najít jako samostatné prvky někde na netu. Většinou bývají zdarma, doporučuji Vám se kouknout na VB Accelerator, tam je jich hodně. Používáním samostatných komponent docílíte toho, že se jednak sníží velikost potřebného diskového místa, a jednak snížíte potřebnou paměť pro běh Vaší aplikace, protože používání Microsoft Common Controls potřebuje minimálně min. 1MB paměti.

3. Za běhu programu nepoužívejte metodu Hide u formuláře, místo toho vždy používejte Unload, protože ta odebere formulář z paměti. Při použití metody Hide je formulář stále v paměti, jenom není vidět. Je pravda, že pokud je formulář pouze skryt a vyvoláte ho, pak je zobrazen rychleji, ale to platí pouze při dalších zobrazeních. Při prvním zobrazení formuláře se stejně musí všechny objekty aktivovat.

4. Kód, který často nepotřebujete, dávejte do formulářů anebo tříd, které mohou být snadno načteny a zase uvolněny z paměti. Pokud kód vložíte do modulu, je načten vždy při startu aplikace bez ohledu na to, zda jej potřebujete či nikoliv.

5. Používejte správnou definici datových typů. Pokud například víte, že proměnná bude číslo v rozsahu 1 až 256, pak ji nadeklarujte jako Byte namísto Integer. Tím bude v paměti zabírat 1 byt namísto 4.

6. Kompilujte do nativního kódu. VB má od verze 5 možnost překladu jak do P-kódu, tak do nativního kódu s možnostmi optimalizace na velikost anebo rychlost. Osobně Vám doporučuji kompilovat do nativního kódu s optimalizací na rychlost.

TIP: Pokud chcete ošetřit co nejvíce chyb, které se mohou objevit při kompilaci, startujte aplikaci pomocí CTRL+F5 namísto F5, protože takto donutíte VB, aby před spuštěním vždy zdrojáky zkompiloval. Druhá možnost je odškrtnout volbu Compile On Demand v nastavení.

7. Používejte magický $. Ve VB existuje celá řada funkcí, které mají dvě možné varianty, například Mid a Mid$, Left a Left$ atd. Ve výsledku jejich činnosti není žádný viditelný rozdíl. Ale funkce Mid vrátí výsledek jako řetězec v datovém typu Variant. Vzhledem k tomu, že pravděpodobně většinou výsledek stejně ukládáte do proměnné typu String, tak VB musí ještě tento výsledek z typu Variant převést na typ String. Pokud ale použijete funkci Mid$, tak ta vrátí výsledek přímo jako řetězec v typu String. Tím samozřejmě VB ušetříte práci a zvýšíte tak výkon Vaší aplikace.

TIP: Pokud chcete vidět všechny funkce, které mají i svou $ verzi, otevřete si Object Browser (F2) a do pole pro hledání zadejte znak $. Mělo by se Vám pak zobrazit cca 25 těchto funkcí.

8. Nepočítejte tu samou věc stále a stále dokola. Typickým příkladem je třeba zjišťování délky jednoho a toho řetězce, kterému se nemění délka, v cyklu. Místo toho si raději jeho délku uložte do proměnné před spuštěním cyklu a pak ji v cyklu používejte.

9. Nezjišťujte jednu a tu samou věc dokola.  Pokud například v cyklu stále potřebujete nějakou vlastnost prvku (například Text u RichTextBoxu), tak si jí nejprve uložte do proměnné a tu používejte v cyklu. Je to mnohem rychlejší.

sBuffer = RichTextBox1.Text
For i = 0 To Len(sBuffer)
   sTemp = Mid$(sBuffer, i, 1)
   Msgbox sTemp
Next

10. Místo spousty If ... Else příkazů použijte Select Case. Je to mnohem rychlejší.

11. Vypněte překreslování prvků. Pokud provádíte s prvkem nějaké operace, například pokud měníte obsah dat v ListView, nejprve mu zakažte překreslování (tady u mě na webu jsou dvě funkce jak toho docílit). Jednak tím zabráníte "blikání" prvku a jednak skutečně výrazně zvýšíte rychlost operace.

12. Používejte With ... End With. Pokud se v proceduře dotazujete nebo nastavujete více hodnot nějakého prvku, tak místo abyste se pořád na každém řádku odkazovali na jméno prvku s plnou cestou k vlastnosti, použijte With ... End With. VB si tak bude adresu prvku v paměti hledat pouze jednou !!!

Tipů jak urychlit výkon Vaší aplikace je jistě víc. Pokud nějaké máte, zašlete mi je mailem a já je zde rád uveřejním.

 
Autor: The Bozena