■
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するのはやめましょう。