StringとStringBuilderの文字列連結を比較する

メモ:  Category:vb

.NET以降大きく変わったStringですが、ヘルプには次のように解説されています。

「Stringオブジェクトは、作成時点以降に値を変更できないことから、不変 (読み取り専用) と呼ばれます。String オブジェクトを変更するように見えるメソッドは、実際には変更内容が反映された新しい String オブジェクトを返します。」

このことから、Stringは値が変更される際、新しいインスタンスが作成されて返されることがわかります。

String以外に文字列を連結することができるクラスにStringBuilderが用意されています。 (System.Text.StringBuilder)

ここでは、インスタンスの作成や破棄がどの位の影響するのか簡単に検証してみます。

検証用結果

Count[10000]= : 00:00:00.8593750
Count[10000]= : 00:00:00
Count[100000]= : 00:03:07.1093750
Count[100000]= : 00:00:00.0468750

検証用のコード

Module Module1

    Sub Main()
        StringCheck()
        StringBuilderCheck()
    End Sub
    Sub StringCheck()

        Dim dtStart As DateTime = DateTime.Now
        Dim strBuffer As String = String.Empty
        Dim nCount As Integer = 10000

        For i As Integer = 0 To nCount
            strBuffer += i.ToString()
        Next
        Trace.Write("Count[" + nCount.ToString + "]= : " + (DateTime.Now - dtStart).ToString() + vbCrLf)

    End Sub
    Sub StringBuilderCheck()

        Dim dtStart As DateTime = DateTime.Now
        Dim sbBuffer As New Text.StringBuilder
        Dim nCount As Integer = 10000

        For i As Integer = 0 To nCount
            sbBuffer.Append(i)
        Next
        Trace.Write("Count[" + nCount.ToString + "]= : " + (DateTime.Now - dtStart).ToString() + vbCrLf)

    End Sub

End Module

bluenote by BBB