中年システムエンジニアのオモチャ箱

中年システムエンジニアが初体験のブログ活動。技術情報の備忘録以外も、色々と載せていければと思います。


VB.NET 文字列結合の速度比較


【スポンサーリンク】


みなさん文字列の結合は、何を利用していますか?
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)

 尚、上記ソースコードを実行しても、環境により速度は変わりますので注意してください。

 

 
 実測結果
  1. ループ数を 100,000 にした場合
    Stringで計測: 11809 ミリ秒
    StringBuilderで計測: 0 ミリ秒
  2. ループ数を 200,000 にした場合
    Stringで計測: 65443 ミリ秒
    StringBuilderで計測: 0 ミリ秒
  3. ループ数を 300,000 にした場合
    Stringで計測: 160899 ミリ秒
    StringBuilderで計測: 16 ミリ秒

実測結果をみても、StringBuilder クラスを利用した方が、断然速いことがわかりますね。

ただし、数箇所の文字列結合であれば、速度に差はでないので、New して StringBuilder クラスを利用するよりも、String クラスで & を利用した方が良いかと思います。
ループで文字列結合する場合は、StringBuilder クラスを利用することをおすすめします。


Visual Basicの絵本 Windowsプログラミングわかる9つの扉