Hallo Leute,
also ich hab jz ma ne ganz dumme Frage...
Wo is der Unterschied zwischen Select...Case....Endselect und If....Then....EndIf??
Danke
Manlius
Select/If
-
- [ offen ]
-
Manlius -
22. Februar 2009 um 19:52 -
Geschlossen -
Erledigt
-
-
Hi
ist eigentlich Geschmackssache, was du verwendest.
Select...Case...EndSelect ist etwas schneller als If...Then...Endif
[autoit]
Außer man verzichtet auf EndifIf $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
Code
Alles anzeigenTest 1 If ist Fertig If braucht 15.8884020175749 Millisekunden Switch ist Fertig Switch braucht 12.8568016326097 Millisekunden Select ist Fertig Switch braucht 15.8512464573011 Millisekunden Test 1 Ende Test 2 If ist Fertig If braucht 15.2557797150196 Millisekunden Switch ist Fertig Switch braucht 12.6211571582422 Millisekunden Select ist Fertig Switch braucht 13.7074684072976 Millisekunden Test 2 Ende Test 3 If ist Fertig If braucht 13.6018683938881 Millisekunden Switch ist Fertig Switch braucht 11.6893348176933 Millisekunden Select ist Fertig Switch braucht 14.2980462600694 Millisekunden Test 3 Ende Test 4 If ist Fertig If braucht 12.9423571990295 Millisekunden Switch ist Fertig Switch braucht 11.319245881809 Millisekunden Select ist Fertig Switch braucht 15.0758685810627 Millisekunden Test 4 Ende Test 5 If ist Fertig If braucht 14.6476018600129 Millisekunden Switch ist Fertig Switch braucht 12.0124904142845 Millisekunden Select ist Fertig Switch braucht 13.7944906405702 Millisekunden Test 5 Ende Test 6 If ist Fertig If braucht 14.157735131141 Millisekunden Switch ist Fertig Switch braucht 13.1325350009568 Millisekunden Select ist Fertig Switch braucht 13.1261794445942 Millisekunden Test 6 Ende Test 7 If ist Fertig If braucht 13.4806239340475 Millisekunden Switch ist Fertig Switch braucht 12.4710682502944 Millisekunden Select ist Fertig Switch braucht 14.2516018097272 Millisekunden Test 7 Ende Test 8 If ist Fertig If braucht 13.4214683709801 Millisekunden Switch ist Fertig Switch braucht 11.6438681452531 Millisekunden Select ist Fertig Switch braucht 14.2173795831593 Millisekunden Test 8 Ende Test 9 If ist Fertig If braucht 14.1650684654055 Millisekunden Switch ist Fertig Switch braucht 11.139823636803 Millisekunden Select ist Fertig Switch braucht 14.7517352065695 Millisekunden Test 9 Ende Test 10 If ist Fertig If braucht 15.8600464584186 Millisekunden Switch ist Fertig Switch braucht 12.2716015582986 Millisekunden Select ist Fertig Switch braucht 12.8748905237956 Millisekunden Test 10 Ende
Testprogramm
[autoit]
[/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)
NextPadmak
-
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 MillisekundenSwitch ist Fertig
Switch braucht 182.098791299232 MillisekundenSelect ist Fertig
Switch braucht 229.375736476078 MillisekundenTest 1 Ende
Test 2
If ist Fertig
If braucht 130.394189654219 MillisekundenSwitch ist Fertig
Switch braucht 102.016289216565 MillisekundenSelect ist Fertig
Switch braucht 129.380932665763 MillisekundenTest 2 Ende
Test 3
If ist Fertig
If braucht 201.328045511917 MillisekundenSwitch ist Fertig
Switch braucht 1005.88091338958 MillisekundenSelect ist Fertig
Switch braucht 162.977651355786 MillisekundenTest 3 Ende
Test 4
If ist Fertig
If braucht 127.927675744354 MillisekundenSwitch ist Fertig
Switch braucht 131.72340849929 MillisekundenSelect ist Fertig
Switch braucht 121.621010038703 MillisekundenTest 4 Ende
Test 5
If ist Fertig
If braucht 128.98367558344 MillisekundenSwitch ist Fertig
Switch braucht 101.581317854275 MillisekundenSelect ist Fertig
Switch braucht 144.569730351279 MillisekundenTest 5 Ende
Test 6
If ist Fertig
If braucht 136.864283906395 MillisekundenSwitch ist Fertig
Switch braucht 142.50634018951 MillisekundenSelect ist Fertig
Switch braucht 170.119059791381 MillisekundenTest 6 Ende
Test 7
If ist Fertig
If braucht 116.061925171516 MillisekundenSwitch ist Fertig
Switch braucht 112.463144767521 MillisekundenSelect ist Fertig
Switch braucht 129.566151685158 MillisekundenTest 7 Ende
Test 8
If ist Fertig
If braucht 132.978036879537 MillisekundenSwitch ist Fertig
Switch braucht 101.201660769271 MillisekundenSelect ist Fertig
Switch braucht 126.562418809536 MillisekundenTest 8 Ende
Test 9
If ist Fertig
If braucht 119.587791300908 MillisekundenSwitch ist Fertig
Switch braucht 147.22481566098 MillisekundenSelect ist Fertig
Switch braucht 145.403634986113 MillisekundenTest 9 Ende
Test 10
If ist Fertig
If braucht 114.496363505316 MillisekundenSwitch ist Fertig
Switch braucht 106.665202793874 MillisekundenSelect ist Fertig
Switch braucht 146.129425351707 MillisekundenTest 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
[/autoit] [autoit][/autoit] [autoit]
$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);If-Then-EndIf
[/autoit] [autoit][/autoit] [autoit]
$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);Switch
[/autoit] [autoit][/autoit] [autoit]
$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);Select
[/autoit]
$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)
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 -
Hä was ist das denn für ein Test?
Da ist meiner noch besser...Padmak