ReDimとCollectionの速さを比べる
これまで同種のデータの集合といえば当然のように配列(Array)を使っていたのですが、最近Collectionという便利なクラスを知ったので使い始めたところとても便利で良い感じです。
とはいえ配列にも便利な部分はあり、まとめると以下のような感じです。
Collection
Array
とはいえ配列にも便利な部分はあり、まとめると以下のような感じです。
Collection
- 良い点
- 宣言がHoges As Collectionなのでわかりやすい
- 要素数を気にしなくて良い
- 型を気にしなくて良い
- 悪い点
- 追加した要素の内容を変更できない
- 何が入っていたか忘れる
Array
- 良い点
- 軽くて早い
- 型を指定できる
- 代入した内容の変更ができる
- 悪い点
- 動的配列を扱うのが面倒
さて、web上に「Collectionは配列に比べると遅い」という話があったので検証してみました。
【コード】
Option Explicit
Dim StartTime As Double
Dim EndTime As Double
Dim i As Long
Dim c As Collection
Dim a() As Long
Const cnt As Long = 1000000
Public Sub main()
Dim row As Long
For row = 1 To 10
Cells(row, 1) = main1
Cells(row, 2) = main2
Next row
End Sub
Public Function main1()
StartTime = Timer
ReDim a(cnt)
For i = 1 To cnt
a(i) = i + i
Next i
EndTime = Timer
main1 = TimeCount(EndTime - StartTime)
End Function
Public Function main2()
StartTime = Timer
Set c = New Collection
For i = 1 To cnt
c.Add Item:=i + i
Next i
EndTime = Timer
main2 = TimeCount(EndTime - StartTime)
End Function
Private Function TimeCount(times As Double) As Double
TimeCount = Format$(Int(times * 10 ^ 7 + 0.5) / 10 ^ 7)
End Function
ここでcntの値を適当に変えながら実行時間を測定したものが以下。(各cnt数につき10回の試行の平均値)
だいたい5~10倍程度Collectionの方が遅いという感じになりました。とはいえ要素数を気にせずAddで追加していける楽さは捨てがたいので、速度がシビアでなければCollectionを使うのは十分アリだと思います。
(Core-i7 2640M 2.80GHzにて測定)
コメント
コメントを投稿