FYI: IIf() oder Switch()?

15/05/2009 - 15:01 von Thomas Winkler | Report spam
Hi,

ich stand gerade vor der Frage, ob bei der Selektion aus 3 möglichen
Werten in einer Abfrage ein geschachteltes

IIf()

oder ein

Switch()

performanter sind. Dazu habe ich folgenden Test gemacht:

Sub test()
Const count As Long = 10000000
Dim lng As Long
Dim res As Double
Dim x As Single
Dim y As Single
Dim index As Long

Randomize Timer
x = Timer()
For lng = 0 To count
index = Int((3 * Rnd) + 1)
res = IIf(index = 1, 1, IIf(index = 2, 2 / 5, IIf(index = 3, 40 /
22, 8)))
Next lng
y = Timer()
Debug.Print "IIf(): " & y - x

Randomize Timer
x = Timer()
For lng = 0 To count
index = Int((3 * Rnd) + 1)
res = Switch(index = 1, 1, index = 2, 2 / 5, index = 3, 40 / 22,
True, 8)
Next lng
y = Timer()
Debug.Print "Switch(): " & y - x
End Sub

Dieser Test lief 3 Mal mit folgenden Ergebnissen:

IIf(): 6,714844
Switch(): 11,62109
IIf(): 6,671875
Switch(): 11,62109
IIf(): 6,683594
Switch(): 11,60547

Um den Einfluss der Zufallszahlberechnung zu eliminieren lief der Test
noch einmal mit "index"-Berechnung außerhalb der Schleifen mit den
Ergebnissen:

IIf(): 5,78125
Switch(): 11,07422
IIf(): 5,714844
Switch(): 9,652344
IIf(): 5,734375
Switch(): 9,636719

IIf() ist also in beiden Szenarios mit rund 57% der Laufzeit von
Switch() die schnellere Variante.

Thomas

"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."
 

Lesen sie die antworten

#1 Oliver Straub
15/05/2009 - 16:28 | Warnen spam
Hi,

IIf(): 6,714844
Switch(): 11,62109
IIf(): 6,671875
Switch(): 11,62109
IIf(): 6,683594
Switch(): 11,60547



ich glaub ich brauch langsam mal neuere Computer! :-)
Meine Zahlen sag ich nicht, aber das Verhàltnis kann ich bestàtigen. ;-)


Gruss
Oliver

Ähnliche fragen