If
我和一位同事对陈述及其表现有不同的看法。我的观点是If...ElseIf
应该使用语句。他的观点是他不相信,并且用嵌套语句ElseIf
编写所有内容。If
假设在这种情况下不能使用 case 语句。我想知道的是,使用嵌套If..Else
语句与 usingIf...ElseIf
语句执行代码的效率如何。我知道代码可读性是一个因素,但这不应该影响性能。
让我们看看下面的例子。
使用 If 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:
If () then
'Do something'
ElseIf () then
'Do something'
ElseIf () then
'Do something'
ElseIf () then
'Do something'
Else
'Do something else'
End If
我知道这是一个小规模的例子,但可以说像这样的块在整个应用程序中被大量使用。
两个代码部分之间是否存在任何性能差异,或者在编译应用程序后它们的性能几乎相同?
####更新#####
我创建了一个程序来测试通过函数运行 x 次。
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
我运行了程序,这是我的结果:
500 次循环平均 - ElseIf:108.248ms If Else:106.507ms
1000 循环平均 - ElseIf:107.747ms If Else:107.451ms(Else 如果先运行)
1000 循环平均 - ElseIf:107.683ms If Else: 107.076ms (ElseIf 先运行)
也许使用更大的数据集,数字会发生变化,但在这 3 次试验中,实际上似乎If Else
优于ElseIf
陈述。