みなさん文字列の結合は、何を利用していますか?
String クラスを利用して「&」ですか?
それとも StringBuilder クラスを利用して「Append メソッド」ですか?
使用するケースによっては速度に差がでます
ループ内で文字列結合する場合には、StringBuilder クラスを利用した方が、断然速いという話を耳にしました。
早速、テストコードで検証をしてみました。
'文字列結合のループ数
Dim intLoopMax As Integer = 100000
'文字列結合する文字
Dim strAdd As String = "abc"
'Stringクラスを使って文字列を追加
Dim tc1 As Integer = System.Environment.TickCount
Dim strTemp As String = ""
For i As Integer = 1 To intLoopMax
strTemp &= strAdd
Next
'計測時間を算出してミリ秒で表示
tc1 = System.Environment.TickCount - tc1
Debug.Print("Stringで計測: {0}ミリ秒", tc1)
'StringBuilderクラスを使って文字列を追加
Dim tc2 As Integer = System.Environment.TickCount
Dim sbTemp As New System.Text.StringBuilder()
For i As Integer = 1 To intLoopMax
sbTemp.Append(strAdd)
Next
'計測時間を算出してミリ秒で表示
tc2 = System.Environment.TickCount - tc2
Debug.Print("StringBuilderで計測: {0}ミリ秒", tc2)
尚、上記ソースコードを実行しても、環境により速度は変わりますので注意してください。
実測結果
- ループ数を 100,000 にした場合
Stringで計測: 11809 ミリ秒
StringBuilderで計測: 0 ミリ秒 - ループ数を 200,000 にした場合
Stringで計測: 65443 ミリ秒
StringBuilderで計測: 0 ミリ秒 - ループ数を 300,000 にした場合
Stringで計測: 160899 ミリ秒
StringBuilderで計測: 16 ミリ秒
実測結果をみても、StringBuilder クラスを利用した方が、断然速いことがわかりますね。
ただし、数箇所の文字列結合であれば、速度に差はでないので、New して StringBuilder クラスを利用するよりも、String クラスで & を利用した方が良いかと思います。
ループで文字列結合する場合は、StringBuilder クラスを利用することをおすすめします。