Länge der Variablen-Namen VS Geschwindigkeit

  • Bei der MatheEX-UDF ist mir es gerade wieder eingefallen:
    eewig lange Variablen Namen wie " $number_mathex_temp"

    Die sind bei einem Interpreter wie AutoIt natürlich suboptimal.

    Bei einer Diskussion im englischen Forum wurde dieses "Problem" bezüglich des Obfuscators schon mal besprochen,
    bzw. eines Programms Namens "AutoIt Optimize":
    http://www.autoitscript.com/forum/index.php?showtopic=100087&st=0&p=717275


    Hier noch mal ein ganz simpler Test:

    [autoit]

    $t = TimerInit()
    $integer_das_ist_die_eine_zahl = 0
    For $integer_zaehler = 0 To 1000000
    $integer_das_ist_die_eine_zahl += $integer_zaehler
    Next
    ConsoleWrite( TimerDiff($t) & @crlf)

    [/autoit][autoit][/autoit][autoit]

    $t = TimerInit()
    $iZ1 = 0
    For $i = 0 To 1000000
    $iZ1 += $i
    Next
    ConsoleWrite( TimerDiff($t) )

    [/autoit]


    auf meinem Rechner läuft die erste Schleife im Schnitt 30%! langsamer ab, als die zweite.

    Also bei großen Schleifen und Sachen wo die Geschwindigkeit eine Rolle spielt, immer schön kurze Namen wählen.

    Einmal editiert, zuletzt von Stilgar (5. November 2009 um 21:26)

  • Bei mir sind die Unterschiede zwischen "stable" und "beta" nicht so gravierend.

    Die Beta ist zwar langsamer, aber das Verhältnis der beiden Werte zueinander bleibt ungefähr gleich ...

    AutoIt "stable":

    Code
    >Running:(3.3.0.0):C:\Programme\AutoIt3\autoit3.exe "D:\A1\AutoIt\Temp\TestTest.au3"    
    381.804890529135
    260.516396648915
    +>22:17:38 AutoIT3.exe ended.rc:0
    +>22:17:39 AutoIt3Wrapper Finished
    >Exit code: 0    Time: 2.147

    AutoIt "beta":

    Code
    >Running:(3.3.1.4):C:\Programme\AutoIt3\beta\autoit3.exe "D:\A1\AutoIt\Temp\TestTest.au3"    
    395.886625868137
    275.31254819521
    +>22:09:31 AutoIT3.exe ended.rc:0
    +>22:09:32 AutoIt3Wrapper Finished
    >Exit code: 0    Time: 2.136

    Gruß
    Greenhorn


  • Interessant, sollte man dann wirklich drauf achten.
    Somit ist dann wohl auch die in allen UDF geübt Praxis $VON_SUPER_LANGEN_KONSTANTEN_NAMEN zu hinterfragen?
    Also besser einen Kommentarblock, in dem man seine Variablennamen erklärt und dann kann man sich kurz halten.

    Sieht fast so aus.

    Der "Compiler" scheint keinerlei Optimierungen in Bezug auf Konstanten vorzunehmen.

    Das hier:

    Spoiler anzeigen
    [autoit]

    $t = TimerInit()
    Global Const $integer_das_ist_die_eine_zahl = 1
    $iZ = 0
    For $ii = 0 To 1000000
    $iZ += $integer_das_ist_die_eine_zahl
    Next
    $t1 = TimerDiff($t) & @crlf

    [/autoit] [autoit][/autoit] [autoit]

    $t = TimerInit()
    Global Const $iC = 1
    $iZ = 0
    For $i = 0 To 1000000
    $iZ += $iC
    Next
    $t2 = TimerDiff($t) & @crlf

    [/autoit] [autoit][/autoit] [autoit]

    $t = TimerInit()
    $iZ = 0
    For $i = 0 To 1000000
    $iZ += 1
    Next
    $t3 = TimerDiff($t) & @crlf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"", $t1 & $t2 & $t3)

    [/autoit]


    ist im kompilierten Zustand leider auch nicht besser, als unkompiliert.

    Eine Möglichkeit bei Konstanten wäre noch diese, einfach vor dem Kompilieren komplett durch die Werte zu ersetzen.
    Aber lohnt sich das? Normalerweise werden diese ja nicht so intensiv und häufig innerhalb des Programms verwendet.