Select vs. Switch

  • hallo,

    ich habe ein Script erstellt, welches den geschwindigkeitsunterschied von

    [autoit]

    Select

    [/autoit]


    gegenüber

    [autoit]

    Switch

    [/autoit]


    errechnet/auswertet, wie auch immer.
    Das Ergebnis bei mir war irre:
    Select hat folgende Zeit gebraucht: ca. 45 Millisekunden
    Switch hat folgende Zeit gebraucht: ca. 25 Millisekunden

    Hier der Code:

    Spoiler anzeigen
    [autoit]

    $var = 0
    $time_select_start = TimerInit()
    while $var <= 10000
    $var += 1
    Select
    case $var = 500
    $man = "500 - 1"
    case $var = 2000
    $man = "2000 - 2"
    case $var = 6000
    $man = "6000 - 3"
    case $var = 9999
    $man = "ENDE"
    EndSelect
    WEnd
    $time_select_ende = TimerDiff($time_select_start)
    MsgBox(0, "", "Select - OK")
    $var = 0
    $time_switch_start = TimerInit()
    while $var <= 10000
    $var += 1
    Switch $var
    case 500
    $man = "500 - 1"
    case 2000
    $man = "2000 - 2"
    case 6000
    $man = "6000 - 3"
    case 9999
    $man = "ENDE"
    EndSwitch
    WEnd
    $time_switch_ende = TimerDiff($time_switch_start)
    MsgBox(0, "", "Select --> " & $time_select_ende & @CRLF & "Switch --> " & $time_switch_ende)

    [/autoit]


    mfg
    hauke96

  • 1. Ich würde sagen der Thread gehört in OffTopic

    2. Wie wir schon alle in der SB gesagt haben ist Switch schneller. Der Grund:

    Select überprüft immer jedes Case einzeln, also Case $Variable = Wert...

    Switch brauch nur eine Variable überprüfen, das geht schneller.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Ich glaube Hauke hat ein Fehler in seinem Script, was die großen Differenzen erklärt.
    Er hat $var vor der Switch schleife nicht auf 0 zurückgesetzt. Dadurch ist ja klar, dass Switch viel schneller sein musste, weil es kaum zum Einsatz kam.

    Edit: so müsste es richtig sein:

    Spoiler anzeigen
    [autoit]

    $var = 0
    $time_select_start = TimerInit()
    while $var <= 10000
    $var += 1
    Select
    case $var = 500
    $man = "500 - 1"
    case $var = 2000
    $man = "2000 - 2"
    case $var = 6000
    $man = "6000 - 3"
    case $var = 9999
    $man = "ENDE"
    EndSelect
    WEnd
    $time_select_ende = TimerDiff($time_select_start)
    $var = 0 ; <-- $var muss auf 0 gesezt werden!
    $time_switch_start = TimerInit()
    while $var <= 10000
    $var += 1
    Switch $var
    case 500
    $man = "500 - 1"
    case 2000
    $man = "2000 - 2"
    case 6000
    $man = "6000 - 3"
    case 9999
    $man = "ENDE"
    EndSwitch
    WEnd
    $time_switch_ende = TimerDiff($time_switch_start)
    MsgBox(0, "", "Select --> " & $time_select_ende & @CRLF & "Switch --> " & $time_switch_ende)

    [/autoit]

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

    Einmal editiert, zuletzt von Developer30 (15. Juli 2011 um 13:18)

  • Mal abgesehen von dem Fehler: Switch kann genauso langsam sein wie Select, wenn die gleiche Art/Anzahl von Vergleichen durchgeführt werden:

    [autoit]

    Switch True
    case $var = 500
    $man = "500 - 1"
    case $var = 2000
    $man = "2000 - 2"
    case $var = 6000
    $man = "6000 - 3"
    case $var = 9999
    $man = "ENDE"
    EndSwitch

    [/autoit]