Select/If

  • Hi

    ist eigentlich Geschmackssache, was du verwendest.

    Select...Case...EndSelect ist etwas schneller als If...Then...Endif
    Außer man verzichtet auf Endif

    [autoit]

    If $Var > 10 Then MsgBox(0,"","")

    [/autoit]

    , dann ist IF schneller.

    Ich persönlich verwende nur IF, da ich dann den Code leichter lesen kann...
    Und eben Switch, mit vielen Vergleichen bei nur einer Auswertung.

    lgE

  • Das normale If...ElseIf...Else...Endif ist eigentlich immer langsamer als Switch

    Ergebnisse
    Testprogramm
    [autoit]


    $Variable = 9999
    ; If
    For $x = 1 To 10
    ConsoleWrite("Test " & $x & @CRLF & @CRLF)
    $timer1 = TimerInit()
    For $i = 1 To 9999
    If $Variable = $i Then
    ConsoleWrite("If ist Fertig" & @CRLF)
    EndIf
    Next
    ; If ende
    $timerende1 = TimerDiff($timer1)
    ConsoleWrite("If braucht " & $timerende1 & " Millisekunden" & @CRLF & @CRLF)

    ;Switch
    $timer2 = TimerInit()
    For $i = 1 To 9999
    Switch $Variable
    Case $i
    ConsoleWrite("Switch ist Fertig" & @CRLF)
    EndSwitch
    Next
    $timerende2 = TimerDiff($timer2)
    ;Switch Ende
    ConsoleWrite("Switch braucht " & $timerende2 & " Millisekunden" & @CRLF & @CRLF)
    ;Select
    $timer3 = TimerInit()
    For $i = 1 To 9999
    Select
    Case $Variable = $i
    ConsoleWrite("Select ist Fertig" & @CRLF)
    EndSelect
    Next
    $timerende3 = TimerDiff($timer3)
    ConsoleWrite("Switch braucht " & $timerende3 & " Millisekunden" & @CRLF & @CRLF)
    ;Select Ende
    ConsoleWrite("Test " & $x & " Ende" & @CRLF & @CRLF)
    Next

    [/autoit]

    Padmak

  • Also ich hab die Tests mal bei mir durchlaufen lassen und dann kam das raus:

    Spoiler anzeigen

    Test 1

    If ist Fertig
    If braucht 165.802031877786 Millisekunden

    Switch ist Fertig
    Switch braucht 182.098791299232 Millisekunden

    Select ist Fertig
    Switch braucht 229.375736476078 Millisekunden

    Test 1 Ende

    Test 2

    If ist Fertig
    If braucht 130.394189654219 Millisekunden

    Switch ist Fertig
    Switch braucht 102.016289216565 Millisekunden

    Select ist Fertig
    Switch braucht 129.380932665763 Millisekunden

    Test 2 Ende

    Test 3

    If ist Fertig
    If braucht 201.328045511917 Millisekunden

    Switch ist Fertig
    Switch braucht 1005.88091338958 Millisekunden

    Select ist Fertig
    Switch braucht 162.977651355786 Millisekunden

    Test 3 Ende

    Test 4

    If ist Fertig
    If braucht 127.927675744354 Millisekunden

    Switch ist Fertig
    Switch braucht 131.72340849929 Millisekunden

    Select ist Fertig
    Switch braucht 121.621010038703 Millisekunden

    Test 4 Ende

    Test 5

    If ist Fertig
    If braucht 128.98367558344 Millisekunden

    Switch ist Fertig
    Switch braucht 101.581317854275 Millisekunden

    Select ist Fertig
    Switch braucht 144.569730351279 Millisekunden

    Test 5 Ende

    Test 6

    If ist Fertig
    If braucht 136.864283906395 Millisekunden

    Switch ist Fertig
    Switch braucht 142.50634018951 Millisekunden

    Select ist Fertig
    Switch braucht 170.119059791381 Millisekunden

    Test 6 Ende

    Test 7

    If ist Fertig
    If braucht 116.061925171516 Millisekunden

    Switch ist Fertig
    Switch braucht 112.463144767521 Millisekunden

    Select ist Fertig
    Switch braucht 129.566151685158 Millisekunden

    Test 7 Ende

    Test 8

    If ist Fertig
    If braucht 132.978036879537 Millisekunden

    Switch ist Fertig
    Switch braucht 101.201660769271 Millisekunden

    Select ist Fertig
    Switch braucht 126.562418809536 Millisekunden

    Test 8 Ende

    Test 9

    If ist Fertig
    If braucht 119.587791300908 Millisekunden

    Switch ist Fertig
    Switch braucht 147.22481566098 Millisekunden

    Select ist Fertig
    Switch braucht 145.403634986113 Millisekunden

    Test 9 Ende

    Test 10

    If ist Fertig
    If braucht 114.496363505316 Millisekunden

    Switch ist Fertig
    Switch braucht 106.665202793874 Millisekunden

    Select ist Fertig
    Switch braucht 146.129425351707 Millisekunden

    Test 10 Ende

    Also irgendwie is bei meinem PC if manchmal schneller als switch und select.

  • Bei dem oben angegebenen Testskript werden die Verzweigungen nicht diskret abgefragt.
    In die Ergebnisse spielen noch die Schleife und das ConsoleWrite ein.

    Folgendes sollte etwas aufschlussreicher sein:

    Spoiler anzeigen
    [autoit]

    $Variable = 999999

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

    $Time = 0
    $i=1
    While True
    $timer = TimerInit()
    If $Variable = $i Then
    ExitLoop
    EndIf
    $Time += TimerDiff($timer)
    $i +=1
    WEnd
    ConsoleWrite("If-Then-Endif braucht " & $Time / $Variable & " Millisekunden" & @CRLF & @CRLF)

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

    ;If-Then-EndIf
    $Time = 0
    $i=1
    While True
    $timer = TimerInit()
    If $Variable = $i Then ExitLoop
    $Time += TimerDiff($timer)
    $i +=1
    WEnd
    ConsoleWrite("If-Then braucht " & $Time / $Variable & " Millisekunden" & @CRLF & @CRLF)

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

    ;Switch
    $Time = 0
    $i=1
    While True
    $timer = TimerInit()
    Switch $Variable
    Case $i
    ExitLoop
    EndSwitch
    $Time += TimerDiff($timer)
    $i +=1
    WEnd
    ConsoleWrite("Switch braucht " & $Time / $Variable & " Millisekunden" & @CRLF & @CRLF)

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

    ;Select
    $Time = 0
    $i=1
    While True
    $timer = TimerInit()
    Select
    Case $Variable = $i
    ExitLoop
    EndSelect
    $Time += TimerDiff($timer)
    $i +=1
    WEnd
    ConsoleWrite("Select braucht " & $Time / $Variable & " Millisekunden" & @CRLF & @CRLF)

    [/autoit]


    Das alles bewegt sich im Rahmen der Messgenauigkeit von TimerInit-TimerDiff - also so oder so nicht sehr aussagekräftig.

    Prinzipiell eignet sich If-Then für einfache 2-gliedrige Verzweigungen.
    Sobald mehr verschiedenartige Abfragen hinzukommen macht ein Select Sinn weil es etwas übersichtlicher als ein ElseIf (aber auch das ist Geschmackssache) ist und wenn speziell immer nur eine Variable abgefragt wird dann macht Switch Sinn.
    Performance-mäßig sollte sich alles nicht viel nehmen - spüren wird man das auf keinen Fall.
    Das müssten schon arge Spezialfälle sein

    Einmal editiert, zuletzt von AspirinJunkie (23. Februar 2009 um 12:20)