これは Visual Basic Advent Calendar 2012 の記事です。
VBならではの構文の一つに Redim Preserve という配列の再確保と再定義を行うものがあります。コレクションクラス全盛である今では、ほとんど使う機会もないものです。
ひょっとするとレスポンス的に問題があるのかな、などと不意に思ったので調べてみました。
1: Sub Main()
2:
3: Dim tm As DateTime = Nothing
4:
5: Dim ar2 As New ArrayList(0)
6: ar2.Add(0)
7: tm = Now
8: For cnt = 1 To 10000
9: ar2.Add(cnt)
10: Next
11: For cnt = 1 To 10000
12: Console.Write(ar2(cnt).ToString + " ")
13: Next
14: Dim tm2 = Now - tm
15:
16: Dim ar1(0) As Integer
17: ar1(0) = 0
18:
19: tm = Now
20: For cnt = 1 To 10000
21: ReDim Preserve ar1(ar1.Max + 1)
22: ar1(cnt) = cnt
23: Next
24: For cnt = 1 To 10000
25: Console.Write(ar1(cnt).ToString + " ")
26: Next
27: Dim tm1 = Now - tm
28:
29: Console.WriteLine("")
30: Console.WriteLine("Preserve :" + tm1.ToString)
31: Console.WriteLine("Array :" + tm2.ToString)
32:
33: Console.ReadLine()
34: End Sub
こんな感じのテストロジックを使って試してみたところ、Preserve を使った場合は「ほんの若干」遅い程度で、ArrayList とほぼ同様のレスポンスを発揮していました。
何度か試してみたところ、スコアにそれほどの変換は現れませんでしたので、ほぼ同じ程度のレスポンスと考えてよいかと思います。
ただし。
Preserve を利用した場合、初回のタイミングでガクンと負荷がかかるというか、レスポンスが悪くなります。それはもう体感できるレベルですので、今の時点では利用する必要は全くないのではないかな、と思いました。
0 件のコメント:
コメントを投稿