Jump to content

Performance Test - Declaring Variables


Recommended Posts

Hello,

I wrote a benchmark script to measure variable declarations
to find out whether you should focus more on static or global variables

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.5

#ce ----------------------------------------------------------------------------

#Region Pre-Setting

Local $iTally1 = 0
Local $iTally2 = 0
Local $iTally3 = 0
Local $iTally4 = 0
Local $iTally5 = 0
Local $iTally6 = 0
Local $iTally7 = 0

Global $GLOBALCONST1 = 1
Global $GLOBALCONST2 = 1
Global $GLOBALCONST3 = 1
Global $GLOBALCONST4 = 1
Global $GLOBALCONST5 = 1

#EndRegion Pre-Setting


#Region Test Functions

Func s1()
    Static $i = $GLOBALCONST1
    Return $i
EndFunc

Func g2()
    Return $GLOBALCONST2
EndFunc

Func g3()
    Static $i7 = "gsdgdfegbgbrwefw"
    Return $GLOBALCONST3
EndFunc

Func g4()
    Static $i1 = 1
    Static $i2 = "asd"
    Static $i3 = 234
    Static $i4 = True
    Static $i5 = [0]
    Static $i6 = "hgsdg"
    Static $i7 = 1
    Static $i8 = 1
    Static $i9 = 1
    Static $i0 = 1
    Return $GLOBALCONST4
EndFunc

Func g5()
    Local $i = $GLOBALCONST5
    Return $i
EndFunc

Func g6()
    Local $i = 1
    Return $i
EndFunc

Func g7()
    Return 1
EndFunc

#EndRegion Test Functions



#Region Benchmark Loop

For $i = 0 To 15

    Local $tDelta = TimerInit()
    Do
        $iTally1 += s1()
    Until TimerDiff($tDelta) >= 1000

    Local $tDelta = TimerInit()
    Do
        $iTally2 += g2()
    Until TimerDiff($tDelta) >= 1000

    Local $tDelta = TimerInit()
    Do
        $iTally3 += g3()
    Until TimerDiff($tDelta) >= 1000

    Local $tDelta = TimerInit()
    Do
        $iTally4 += g4()
    Until TimerDiff($tDelta) >= 1000

    Local $tDelta = TimerInit()
    Do
        $iTally5 += g5()
    Until TimerDiff($tDelta) >= 1000

    Local $tDelta = TimerInit()
    Do
        $iTally6 += g6()
    Until TimerDiff($tDelta) >= 1000

    Local $tDelta = TimerInit()
    Do
        $iTally7 += g7()
    Until TimerDiff($tDelta) >= 1000

Next

#EndRegion Benchmark Loop


ConsoleWrite(@CRLF&"Static1: "&$iTally1&" pkt"&@CRLF&"Global2: "&$iTally2&" pkt"&@CRLF&"Global3: "&$iTally3&" pkt"&@CRLF&"Global4: "&$iTally4&" pkt"&@CRLF&"Local5:  "&$iTally5&" pkt"&@CRLF&"Local6:  "&$iTally6&" pkt"&@CRLF&"Hardcode7:"&$iTally7&" pkt"&@CRLF)

#cs

Result

Static1:   10291881 pkt     global to static
Global2:   13977324 pkt     only global
Global3:    9886169 pkt     global and static
Global4:    2933051 pkt     global and many statics
Local5:     9937314 pkt     global to local
Local6:    10306484 pkt     only local
Hardcode7: 14835319 pkt     no variable

#ce

Result:

100% no variable, hardcore value
94% only global variable use
69% only local variable use with hardcore value set
69% only static variable use with global variable value set
67% declaration of local variable with global variable value set
66% only global variable use with one static variable beside
20% only global variable use with ten static variables beside

My thesis of the result:

  • Be careful with declarations, whether local, global or static

Note: in my test the global variable performance was better than the local one, but in practice the global one would lose performance due to multiple operations

 

What is your best practice sharing data between multiple functions?

Link to comment
Share on other sites

  • 2 months later...

I am quite new to autoit so I might not be using the best method but from my experience with 50K+ lines of excel files:
I declare all the variables I need in a local array, then I call the array in the function by using the Byref keyword so the function has acces to the original variables. However if the scope of a project is not much of an issue I would declare them Global.
 

For a script that reads out and processes .csv files with total size of approx 20MB and the arrays are declared locally it took  33.88 seconds

the same script with arrays declared globally took 34.61 seconds

 

 

Sorry for the doublepost, editing was not possible as far as I can tell and I accidently hit the submit reply button .

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...