[C#] StringBuilderで文字列処理高速化

  • このエントリーをはてなブックマークに追加

あちこちで紹介されており、もはや定番とされている StringBuilderによる高速処理。

string型は+演算子で容易に文字列を連結することができるが、いささか速度が遅く、
パフォーマンスを重視したアプリケーションではかなりの重荷となりかねない。
そこでSystem.Text.StringBuilderクラスを使うといい。
実際に速度の違いを比べてみた。

以下のコードを記述し実行した。

[csharp]
using System;
using System.Text;
using System.Diagnostics;

class Program
{
static void Main(string[] args)
{
const int LOOP = 10000;
string src = “Hello, C# world!”;
Stopwatch sw = new Stopwatch();
Console.WriteLine(“source string: {0:s}”, src);

    // String
    string str = string.Empty;
    sw.Reset();
    sw.Start();
    for (int i = 0; i < LOOP; i++) {
        str += src;
    }
    sw.Stop();
    Console.WriteLine("String: {0:d}ms", sw.ElapsedMilliseconds);

    // StringBuilder
    StringBuilder sb = new StringBuilder();
    sw.Reset();
    sw.Start();
    for (int i = 0; i < LOOP; i++) {
        sb.Append(src);
    }
    sw.Stop();
    Console.WriteLine("StringBuilder: {0:d}ms", sw.ElapsedMilliseconds);

    Console.ReadLine();
}

}
[/csharp]

実行結果

source string :Hello, C# World!!
String       : 3687ms
StringBuilder: 1ms
Press any key.

今回は”Hello, C# World!”の文字を1万回連結するルーチンを組んだが、stringでは3秒半以上かかっているのに対し、

StringBuilderでは1ms程度しか要していない。

やりたいことは同じでもやりかたによって大きくパフォーマンスが変わるといういい例。

今まで大量の文字列連結を+演算子だけでやっていた方にはぜひこちらをおすすめしたい。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。




コメントを残す