Ein Mitarbeiter und ich haben unterschiedliche Meinungen über If
Aussagen und ihre Leistung. Meine Ansicht ist, dass If...ElseIf
Aussagen verwendet werden sollten. Seine Ansicht ist, dass er nicht glaubt in ElseIf
, und schreibt alles mit verschachtelten If
Aussagen.Leistungsunterschiede von verschachtelten wenn Else-Anweisungen vs. ElseIf-Anweisungen
Angenommen, eine case-Anweisung kann in dieser Situation nicht verwendet werden. Was ich frage mich ist, wie effizient Code mit verschachtelten If..Else
Aussagen im Vergleich zu If...ElseIf
Anweisungen ausgeführt wird. Ich weiß, dass die Lesbarkeit von Code ein Faktor ist, aber das sollte die Leistung nicht beeinträchtigen.
Schauen wir uns die folgenden Beispiele an.
verwenden Wenn Else:
If() then
'Do something'
Else
If() then
'Do something'
Else
If() then
'Do something'
Else
If() then
'Do something'
Else
'Do something else'
End If
End If
End If
End If
ElseIf Verwendung:
If() then
'Do something'
ElseIf() then
'Do something'
ElseIf() then
'Do something'
ElseIf() then
'Do something'
Else
'Do something else'
End If
Ich weiß, das ist ein kleines Beispiel, läßt aber wie diese Blöcke sagen, sind stark in der gesamten Anwendung verwendet.
Gibt es Leistungsunterschiede zwischen den beiden Codeabschnitten oder würden sie fast identisch funktionieren, sobald die Anwendung kompiliert wurde?
#### UPDATE #####
habe ich ein Programm zu testen, die Funktionen x Anzahl der Laufzeiten durch.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To 1000
Run()
Next
End Sub
Sub Run()
Dim Time1Start As Integer = 0
Dim Time1End As Integer = 0
Dim Time2Start As Integer = 0
Dim Time2End As Integer = 0
Time2Start = CInt(DateTime.Now.ToString("fff"))
runElse()
Time2End = CInt(DateTime.Now.ToString("fff"))
Time1Start = CInt(DateTime.Now.ToString("fff"))
runElseIf()
Time1End = CInt(DateTime.Now.ToString("fff"))
TextBox1.Text += If(Time1End < Time1Start, Time1End + (1000 - Time1Start), Time1End - Time1Start) & vbTab & If(Time2End < Time2Start, Time2End + (1000 - Time2Start), Time2End - Time2Start) & vbCrLf
End Sub
Sub runElseIf()
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
If sleep(10) Then
'Do something'
Else
'Do something else'
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
Sub runElse()
If sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
ElseIf sleep(10) Then
'Do something'
Else
'Do something else'
End If
End Sub
Function sleep(ByVal ms As Integer) As Integer
System.Threading.Thread.Sleep(ms)
Return False
End Function
End Class
ich das Programm lief und hier sind meine Ergebnisse:
500 Loops Durchschnitt - ElseIf: 108.248ms Wenn Else: 106.507ms
1000 Loops Average - ElseIf: 107.747ms Wenn Else: 107.451ms (Else If laufen zuerst)
1000 Loops Average - ElseIf: 107.683ms Wenn Else: 107.076ms (ElseIf
vielleicht mit einem größeren Datum ändern würden die Zahlen gesetzt zuerst) ausgeführt wird, aber aus diesen drei Studien scheint es tatsächlich, dass die If Else
übertrifft die ElseIf
Aussagen.
Es gibt keine Leistungsunterschiede sind nur Lesbarkeit ... – dcro
Sie streiten sich grundsätzlich, ob blau oder grün die beste Farbe ist ... Dies muss ohne Auswirkungen auf die Leistung wenig. – BentOnCoding
Ich stimme sowohl drco als auch BentOnCoding zu. Hey, wenn dein Kollege RPS oder Karpaltunnel haben will, benutze auf keinen Fall 'ElseIf'. Aber ich würde es nicht empfehlen (aus Gründen der Code-Klarheit - obwohl auch Gesundheitsgründe nicht schlecht sind;)) – fourpastmidnight