『StringBuilder』は速い - C#

ループで何度も文字列を加えていく処理を行う場合、『+=』を使うのではなくて、『StringBuilder』クラスを使うと格段に処理が速い。VBもフレームワークは同じなのでVBユーザーも。

どれだけ処理速度に違いがあるのか、サンプルとして100000回繰り返す処理をしてみた。

サンプルコード:

static void Main(string[] args)
{
    string addWord = "abc";
    int loopCnt = 100000;
    DateTime beginTime = new DateTime();

    //::::::::::::::::::::::::::::::::::::::::::::::::::::://

    StringBuilder tmpSB = new StringBuilder();

    beginTime = DateTime.Now;

    for (int i = 0; i < loopCnt ; i++)
    {
        tmpSB.Append(addWord);
    }
    Console.WriteLine("StringBuilderを使用した場合:" + (DateTime.Now - beginTime).TotalMilliseconds + "ms");

    //::::::::::::::::::::::::::::::::::::::::::::::::::::://

    string tmp = "";

    beginTime = DateTime.Now;

    for (int i = 0; i < loopCnt; i++)
    {
        tmp += addWord;
    }
    Console.WriteLine("+= で処理した場合:" + (DateTime.Now - beginTime).TotalMilliseconds +"ms");
}


結果)
  • StringBuilderを使用した場合:6ms
  • += で処理した場合:19700ms


上記では加えていく文字列は3文字だが、これを倍の6文字にすると結果は
  • StringBuilderを使用した場合:6ms
  • += で処理した場合:50290ms

StringBuilderでの処理時間に差はないが、+=はやはり加える文字列の長さが処理時間に影響するようだ。


参考)PCスペック
OS: Win Vista
CPU: Core 2 Duo 2.66GHz

これだけ違うなら使う気にもなるだろう。
でも、実際はこんなに文字列を加える処理ってあまり行う機会はないんですけど…

0 Comments:

Sony Style(ソニースタイル)
デル株式会社

Recent Posts