ContainsKey
vsのパフォーマンスをテストしましTryCatch
た。結果は次のとおりです。
デバッガーが接続されている場合:
デバッガーが接続されていない場合:
Sub Main
以下のコードのみを使用して、コンソール アプリケーションのリリース ビルドでテスト済みです。ContainsKey
デバッガーを使用すると 37000 倍速くなり、デバッガーが接続されていない場合でも 355 倍速くなります。したがって、2 回ルックアップを行っても、追加の例外をキャッチする必要がある場合ほど悪くはありません。これは、紛失したキーを頻繁に探していることを前提としています。
Dim dict As New Dictionary(Of String, Integer)
With dict
.Add("One", 1)
.Add("Two", 2)
.Add("Three", 3)
.Add("Four", 4)
.Add("Five", 5)
.Add("Six", 6)
.Add("Seven", 7)
.Add("Eight", 8)
.Add("Nine", 9)
.Add("Ten", 10)
End With
Dim stw As New Stopwatch
Dim iterationCount As Long = 0
Do
stw.Start()
If Not dict.ContainsKey("non-existing key") Then 'always true
stw.Stop()
iterationCount += 1
End If
If stw.ElapsedMilliseconds > 5000 Then Exit Do
Loop
Dim stw2 As New Stopwatch
Dim iterationCount2 As Long = 0
Do
Try
stw2.Start()
Dim value As Integer = dict("non-existing key") 'always throws exception
Catch ex As Exception
stw2.Stop()
iterationCount2 += 1
End Try
If stw2.ElapsedMilliseconds > 5000 Then Exit Do
Loop
MsgBox("ContainsKey: " & iterationCount / 5 & " per second, TryCatch: " & iterationCount2 / 5 & " per second.")