あちこちで紹介されており、もはや定番とされている 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程度しか要していない。
やりたいことは同じでもやりかたによって大きくパフォーマンスが変わるといういい例。
今まで大量の文字列連結を+演算子だけでやっていた方にはぜひこちらをおすすめしたい。
コメント