■
C#のStringBuilderの編集文字列初期化について
C#のStringBuilderは文字列の編集において高速に行うことができる。
これを、一旦クリアしたいときなどは、通常はClearメソッドを使うのが通常である。
しかしながら、再インスタンス化をしているコードを見つけその速度差が気になった。もともと、速度が問題視されている箇所であり、これが原因ではないかと思いClearメソッドと再インスタンス化するものとの速度比較をしてみた。
.NET4.8で計測している。
static void Main(string[] args)
{
int loop = 10000000;
Stopwatch sw = new Stopwatch();
StringBuilder sb = new StringBuilder();
GC.Collect();
sw.Start();
string[] st1 = new string[loop];
for (int i = 0; i < loop; i++)
{
sb = new StringBuilder();
sb.Append("hogehoge");
sb.Append("fugafuga");
sb.Append(i.ToString());
sb.Append("回目のループ");
st1[i] = sb.ToString();
}
sw.Stop();
var newString = sw.ElapsedMilliseconds;
sw.Reset();
GC.Collect();
string[] st2 = new string[loop];
for (int i = 0; i < loop; i++)
{
sb.Clear();
sb.Append("hogehoge");
sb.Append("fugafuga");
sb.Append(i.ToString());
sb.Append("回目のループ");
st2[i] = sb.ToString();
}
sw.Stop();
var sbclear = sw.ElapsedMilliseconds;
Console.WriteLine("new : " + newString + "ms");
Console.WriteLine("Clear: " + sbclear + "ms");
}
結果、このようにClearメソッドの方が圧倒的に速いという結果になった。
StringBuilderの文字列を初期化したいというだけでnewするのはやめましょう。