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
これは小規模な例であることは承知していますが、このようなブロックがアプリケーション全体で頻繁に使用されているとしましょう。
2 つのコード セクション間にパフォーマンスの違いはありますか? または、アプリケーションがコンパイルされると、ほとんど同じように動作しますか?
####アップデート#####
関数を 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 If running first)
1000 ループ平均 - ElseIf: 107.683ms If Else: 107.076ms (ElseIf が最初に実行されます)
おそらく、より大きなデータセットでは数値が変わるでしょうが、これらの 3 回の試行のうち、実際にはステートメントIf Else
よりも優れているように見えます.ElseIf