ホーム ] TIPS ] ソフトウェア実験室 ]

上へ
ビットマップの処理速度
色変換速度
数式演算速度
冪乗演算速度
検索速度
文字列処理速度
文字列/数値処理速度
CPU演算速度
TicksとPerformance Counter
文字の数値化
数値化文字の再現
数値化文字の補間
補間の効果
ネイピア数
ネイピア数2
指数関数近似値
級数の収束速度1
級数の収束速度2
級数の精度
逆三角関数を求める
算術幾何平均でπを求める
全フォルダ列挙
ビットマップとメモリリソース
配列とメモリリソース

ソフトウェア実験室

文字列処理速度

最終更新:2006/01/03

 VB.NETのString型は、インスタンスが不変となっている。これは、一度設定した内容を変更しても、元のインスタンスは保持され、新しくインスタンスが生成され、その参照が更新されることになる。つまり、小刻みに変更をすると、その都度、インスタンスが作られ、そのStringが生きている間、メモリを(ムダに)消費することになるし、処理速度も 遅くなる。

 一方、クラスとして、StringBuilder がある。これは、可変(長)文字列で、文字を変更したり、追加、削除しても、インスタンスそのものが更新されるタイプとなっている。Stringに比べて、若干取っつきにくい面があるが、 リソースや速度の点で有利とされている。両者の処理速度を比較してみた。

●比較対象

String型とStringBuilderクラス
  

●比較・実験方法

 空白の文字列に、文字"A"を5万回追加し、その時間を計測する。

●結果  

いずれもマシンは、CPU:ペンティアム4 2GHz、メモリ:1024MB、OS:Windows XP Pro SP2 となっている。

○String

 約5,000 ms

○StringBuilder

 約16 ms 以下

●考察

 圧倒的に、StringBuilderが速い。Stringのコンセプトが分からなくなるほどの差である。

●結論

ちょっとした文字列の操作では、String が扱い良く便利であるが、長大あるいは更新の激しい文字列処理では、絶対に、StringBuilderを使用すべきである。

●実験のプログラムリスト

Dim Kai As Integer = 50000

Dim i As Integer
Dim Str As String
Dim StrB As New StringBuilder()    'Newでインスタンスを生成
Dim St, Ed As Long
Me.Cursor = Cursors.WaitCursor
St = Now.Ticks
For i = 0 To Kai - 1
   Str = Str + "A"    'Stringにとっては、最悪の処理
Next
Ed = Now.Ticks
lblR.Text = vbCrLf + "【String】" + vbCrLf + ((Ed - St) / 10000).ToString("#,##0") + " ms"
St = Now.Ticks
For i = 0 To Kai - 1
   StrB.Append("A")
Next
Ed = Now.Ticks
lblR.Text = lblR.Text + vbCrLf + vbCrLf + "【StringBuilder】" + vbCrLf + ((Ed - St) / 10000).ToString("#,##0") + " ms"
Me.Cursor = Cursors.Default