C#

StringBuilderで文字列処理高速化

C#

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

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

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

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();
    }
}
スポンサーリンク

実行結果

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

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

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

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

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

スポンサーリンク
記事を書いた人

システムえんじにゃー🐈
趣味はエレキギター、自転車など。作曲したい。
World of Warshipsやってます。
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする
surface0 (さーふぇす)をフォローする

コメント

タイトルとURLをコピーしました