Laufzeit von For...Next Schleifen

    • Offizieller Beitrag

    Eigentlich wollte ich mal testen, ob es einen Unterschied zwischen diesen beiden Varianten gibt:

    [autoit]


    Global $j, $i, $x, $timer, $t1, $t2

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

    $x = 0
    $timer = TimerInit()
    For $j = 0 TO 4
    For $i = 0 To 1000000
    $x += 1
    Next
    Next
    $t1 = TimerDiff($timer)
    $t1 = Round($t1/1000, 4)

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

    $x = 0
    $timer = TimerInit()
    For $j = 0 TO 4
    For $i = 1000000 To 0 Step -1
    $x += 1
    Next
    Next
    $t2 = TimerDiff($timer)
    $t2 = Round($t2/1000, 4)

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

    MsgBox(0, 'Test', $t1 & ' sek.' & ' <-> ' & $t2 & ' sek.')

    [/autoit]

    Bei mir ergaben sich da keine großen Unterschiede. Mal war Variante 1 etwas schneller und mal Variante 2, liegt also wohl im Bereich der Mess(un)genauigkeit.

    Was mir aber aufgefallen ist, dass es einen Unterschied zwischen der letzten AutoIt-Stable und der -Beta gibt. Dieser liegt (bei mir) bei ca. 0.1 sek., die die Beta langsamer ist. Was wurde da denn "optimiert"? ;)

    Könnt ihr das bestätigen?

    • Offizieller Beitrag

    Ich habe nochmal ein anderes Testprogramm geschrieben, wo man mehr Werte erhält:

    [autoit]


    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Global $a1, $a2, $a3, $a4, $x, $timer, $msg = '', $t, $sum

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

    GUICreate('Test', 320, 600, -1, 0)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'End')
    Global $edit = GUICtrlCreateEdit('', 10, 10, 300, 580)
    GUISetState()

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

    For $y = 0 To 19
    $x = 0
    $timer = TimerInit()
    For $a1 = 0 To 9
    For $a2 = 0 To 9
    For $a3 = 0 To 9
    For $a4 = 0 To 1999
    $x += 1
    Next
    Next
    Next
    Next
    $t = TimerDiff($timer)/1000
    $msg &= $t & @CRLF
    $sum += $t
    GUICtrlSetData($edit, $msg)
    Next
    $msg &= @CRLF & @CRLF & Round($sum/20, 4)
    GUICtrlSetData($edit, $msg)

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

    While 1
    Sleep(20)
    WEnd

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

    Func End()
    Exit
    EndFunc

    [/autoit]

    Wenn ich es mit der 3.2.10.0 starte:

    Mit der Beta 3.2.11.1 hingegen:

    AntiVir deaktiviert, alle anderen Hintergrundprogramme soweit wie möglich beendet. Die Werte sind ja auch relativ stabil.

    • Offizieller Beitrag

    Hmmh, bei mir sieht es so aus:

    Spoiler anzeigen

    3.15449226088791
    3.23477928060689
    3.0411460115741
    3.14267902764178
    3.13466376313191
    3.10842439472056
    3.10024905399988
    3.03607888712113
    3.08432552181911
    3.07712628280969
    3.05169204465931
    3.09508722477298
    3.0311179214118
    3.12452923486086
    3.35153182876595
    3.08421629005921
    3.05660048972705
    3.11887460557138
    3.0898711987138
    3.07138728525553


    3.1094

    3.09964562535183
    3.07196780596417
    3.01977402155861
    3.01010379810842
    3.0032886861319
    3.43696084278868
    3.04260010699684
    3.01726113235062
    3.14802859022585
    2.98154877226016
    3.05989001395429
    3.02742611141919
    3.08799749688857
    3.22437404753956
    3.04198215136281
    3.08993824634136
    3.00892767097494
    3.04334657058369
    3.04102337028868
    3.04478027235305


    3.075

    Mega

  • Bei mir so:

    Spoiler anzeigen

    //Edit: AMD Athlon 64 X2 3800+
    //Edit: Ja, sieht so aus als ob die Beta auf langsamere Rechner optimiert wurde :)

    2 Mal editiert, zuletzt von progandy (22. Februar 2008 um 17:23)