【发布时间】:2013-09-01 22:21:13
【问题描述】:
我和一位同事对If 的声明及其表现有不同的看法。我的观点是应该使用If...ElseIf 语句。他的观点是他不相信 ElseIf,并用嵌套的If 语句编写所有内容。
假设在这种情况下不能使用 case 语句。我想知道的是,使用嵌套的If..Else 语句与使用If...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
我知道这是一个小规模的例子,但可以说像这样的块在整个应用程序中被大量使用。
这两个代码段之间是否存在性能差异,或者在编译应用程序后它们的性能几乎相同?
####UPDATE#####
我创建了一个程序来测试通过函数运行 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 语句。
【问题讨论】:
-
没有性能差异,只是可读性...
-
您基本上是在争论蓝色还是绿色是最好的颜色...这对性能几乎没有影响。
-
ILDASM。我敢打赌它是一样的。
-
您的同事要么对编程一无所知,要么在编写代码时有其他严重不兼容的优先事项。最重要的是,他会做一些疯狂的事情,会说些油嘴滑舌和荒谬的谎言来为自己辩解。他是一个愚蠢而恶毒的小丑。据我所知,也可能是恶意的。以火杀之,别给它参考。我向你保证,如果他留下来,他最终会进入管理层,然后你就会遇到真正的麻烦。
-
If Else优于ElseIf语句。值得怀疑,差异如此之小。
标签: .net vb.net if-statement