V tomto článku je popsáno, jak sledovat dobu trvání makra nebo části makra, a také jaký dopad má definice proměnných na délku trvání.

Sledování doby trvání makra je velmi užitečné pro ladění výkonnosti makra. Tedy když potřebujeme sledovat, jak se doba trvání makra mění v závislosti na změnách, které děláme.

Princip je jednoduchý. Na začátku uložíme (funkcí Timer) čas začátku, a na konci tuto hodnotu odečteme od času zaznamenaného na konci. Výsledek je logicky roven době trvání makra. 

'Měříč času
Sub čas_trvání_makra()
'Definice proměnných
Dim zacatek As Double
Dim trvani As Double
Dim x As Long
Dim y As Single
'Zaznamenání času začátku
zacatek = Timer
'Samotný kód makra
For x = 1 To 100000000
    y = y + x * y * Rnd - Rnd * y * x
Next x
'Porovnání začátku a konce makra
trvani = Timer - zacatek
'Zobrazení výsledku
MsgBox (trvani)
End Sub

 

V uvedeném kódu si můžeme i ukázat, že zajímavý dopad na výkonnost má deklarace proměnných. Pokud bychom například zapomněli deklarovat proměnné x a y (s těmi se pracuje v každém cyklu a jejich dopad je tedy klíčový), prodlouží se výrazně doba trvání makra. 

Tento rozdíl je způsobený tím, že pokud proměnnou nenadefinujeme, nastaví si ji aplikace automaticky na typ “variant”. Ten je ale ze všech typů paměťově nejnáročnější – zabere 16 bajtů, zatímco např. “integer” jen dva bajty, “long” a “singl” 4 bajty a “double” 8 bajtů.

S větším objemem dat se logicky pomaleji manipuluje a makro probíhá pomaleji. V našem případě to vychází na mém trochu obstrarožním Lenovu na lehce přes 20 sekund s deklarací proměnných x a y a kolem 56 sekund bez deklarace.  Rozdíl je tedy zásadní.

Pomalý kód bez funkčních deklarací je jako odstrašující příklad tady. Rozdíl v trvání si můžete vyzkoušet.

'Měříč času
Sub čas_trvání_makra()
'Definice proměnných
Dim zacatek As Double
Dim trvani As Double
'Dim x As Long
'Dim y As Single
'Zaznamenání času začátku
zacatek = Timer
'Samotný kód makra
For x = 1 To 100000000
    y = y + x * y * Rnd - Rnd * y * x
Next x
'Porovnání začátku a konce makra
trvani = Timer - zacatek
'Zobrazení výsledku
MsgBox (trvani)
End Sub