[ 月別 | 分類別 ]

[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つの文字列にするような場合においても、かなりのループを回したり、処理が集中したりするようなケースでもない限り、たいしてパフォーマンスには影響しないことがほとんどだと思うぞ。