今回はDictionaryの高速化方法についてまとめました。Dictionaryは非常に便利なのですが、使い方を誤ると全く性能がでなくなります。違いについてはサンプルプログラムで確認ください。
サンプルプログラム
Dictionary参照の方法としては、Keys、Items、Item、For Eachなどがあります。今回は、サンプルプログラムにある3パタンの参照方法で時間を測定してみました。
一番早かったのはFor Eachを使った場合でした。ただFor Eachを使う場面はあまりないかな・・・・。となるとItemsとItemの違いが重要となりますが、断然Itemの方が早いです。一文字違いですが結果が倍近く違います(Dicitonaryの大きさを変えると指数的に処理時間が増えていくと思われるので、更に大きな差となっていくと思われます)
Sub sample()
Dim dic As New Dictionary
Dim i As Long, k, v As Long
Dim startTime, endTime
For i = 0 To 10000
dic.Add i, i + 1
Next
' Keys,Items
startTime = Timer
For i = 0 To dic.Count - 1
k = dic.Keys(i)
v = dic.Items(k)
Next
endTime = Timer
Debug.Print "Keys,Items", (endTime - startTime)
' Keys,Item
startTime = Timer
For i = 0 To dic.Count - 1
k = dic.Keys(i)
v = dic.Item(k)
Next
endTime = Timer
Debug.Print "Keys,Item", (endTime - startTime)
' For Each
startTime = Timer
For Each Key In dic
k = Key
v = dic.Item(Key)
Next
endTime = Timer
Debug.Print "For Each", (endTime - startTime)
End Sub
出力結果
Keys,Items 2.664063
Keys,Item 1.3125
For Each 0.015625