これは 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 1000012: 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 1000025: 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 件のコメント:
コメントを投稿