同僚と私はIf
ステートメントとそのパフォーマンスに関する意見が異なります。私の見解では、If...ElseIf
ステートメントを使用する必要があります。彼の見解では、はをElseIf
と信じておらず、ネストされたIf
ステートメントですべてを書きます。ネストした場合のElseステートメントとElseIfステートメントのパフォーマンスの相違
この場合、case文を使用できないとします。私が疑問に思っているのは、If..Else
ステートメントと入れ子式If...ElseIf
ステートメントを使用して効率的にコードを実行する方法です。私は、コードの可読性が要因であることを知っていますが、パフォーマンスに影響を与えるべきではありません。
以下の例を見てみましょう。
もしそうでなければ使用:ElseIfステートメントを使用して
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
:
If() then
'Do something'
ElseIf() then
'Do something'
ElseIf() then
'Do something'
ElseIf() then
'Do something'
Else
'Do something else'
End If
私は、これは小規模な例ですが、このようなブロックは、アプリケーション全体で頻繁に使用されていると言うことができます知っています。
2つのコードセクションの間にパフォーマンスの違いはありますか?アプリケーションがコンパイルされるとほとんど同じ性能を発揮しますか?
#### 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エルスの場合:106.507ms
千ループの平均 - のElseIf:107.747msエルスの場合:エルス107.451ms(もし最初の)
千ループの平均を実行している - のElseIf:107.683msエルスの場合:107.076ms(のElseIfは、最初の実行されている)
が、これら3回の試験のうち、それが実際に表示されますIf Else
こと文はElseIf
よりも優れています。
何のパフォーマンスの違いは、単に読みやすさは、ありません... – dcro
あなたは基本的に青や緑が...これは、パフォーマンスに影響を与えずに少しを持っている最高の色であるかどうかを議論しています。 – BentOnCoding
drcoとBentOnCodingの両方に同意します。ねえ、あなたの同僚がRPSや手根管を望んでいるなら、是非、ElseIfを使わないでください。しかし、私はそれをお勧めしません(コードの明確性の理由 - 健康上の理由も悪くはありません;)) – fourpastmidnight