[c#][vb.net] StringBuilderを使えばいいってもんじゃないぞという話
2008-11-15 12:56:16
文字列を動的に作る時にはStringBuilderを使ったほうが速くなるといった記事が、 ここや ここなどに書かれているが、これを誤解している人が多いと思う。
ここに書いてあるように、場合によってはStringBuilderを使うほうが遅くなるんじゃないかな。
たとえば、SQL文を作るのに、こんな書き方をしてしまっている例を見つけた。
StringBuilder sb = new StringBuilder();
sb.Append("SELECT");
sb.Append(" A");
sb.Append(",B");
sb.Append(" FROM TABLE1");
見栄えや保守性を考慮してってことだと思うが、
これでほんまに早いの??と思ったので、ちょっと調べてみたら、
やはりこれは意味がないことだとわかった。
つまり、 ここの議論にあるように、先のようなコードを書きたいのであれば、たとえばこんな風に書けばよいのだ。
string s = ""
+ "SELECT"
+ " A"
+ ",B"
+ " FROM TABLE1";
これは、以下のように書くのと同値だ。コンパイル時に変換されるのだ。ildasmというSDKについているツールで調べられるぞ。
string s = "SELECT A,B FROM TABLE1";
また、変数同士をくっつけて1つの文字列にするような場合においても、かなりのループを回したり、処理が集中したりするようなケースでもない限り、たいしてパフォーマンスには影響しないことがほとんどだと思うぞ。