今更だけどC#のStringBuilderの速度を検証してみた
先日社内でソースレビューをしていた先輩が新人君に対して、
「これ!何でこんなソース書いてるの!何でもかんでもStringBuilder使えばいいってもんじゃないよ!これだったら使わないほうがレスポンスが出るよ!何やってんの!」
とブライトさんばりに説教しているのを見て「ほんまかいな?」と思い、検証してみることにした。
新人君ソース
var val = new StringBuilder(); val.Append(" SELECT * "); val.Append(" FROM TEST "); val.Append(" WHERE COL1 = @ID ");
先輩ソース
var val = "SELECT *"; val += "FROM TEST"; val += "WHERE COL11 = @ID ";
計測結果
新人:00:00:00.0000706
先輩:00:00:00.0000851
単純な連結だとStringBuilderのが高速ですね。
んじゃ次に一行で複数の文字を連結した場合はどうなるかを検証。
文字連結
var val = ""; for (int i = 0; i < 10000; i++) { val += "[" + "TEST" + "]"; }
StringBuilder その1
var val = new StringBuilder(); for (int i = 0; i < 10000; i++) { val.Append("[" + "TEST" + "]"); }
StringBuilder その2
var val = new StringBuilder(); for (int i = 0; i < 10000; i++) { val.Append("[").Append("TEST").Append("]"); }
StringBuilder その3
var val = new StringBuilder(); for (int i = 0; i < 10000; i++) { val.AppendFormat("{0}TEST{1}", "[", "]"); }
計測結果
文字連結 :00:00:00.1162029
StringBuilder その1:00:00:00.0002641
StringBuilder その2:00:00:00.0003154
StringBuilder その3:00:00:00.0009535
文字連結に比べて、StringBuilderのが断トツに早いですね。
StringBuilderを利用する場合の中でも【StringBuilder その1】が最速です。
【StringBuilder その3】が今回の例で主に利用されるメソッドに当たると考えていましたが、
速度面だけ見るとその1に比べて3倍程遅くなっています。
検証の結論としては、文字を連結する場合はとりあえずStringBuilder使っとけ。
StringBuilder内で「+」使っても速度劣化せんから気にすんな!
StringBuilder + 可読性が高い書き方にしとけば問題なし。っていう結論に至りました。
[完全版] 究極のC#プログラミング ~新スタイルによる実践的コーディング
- 作者: 川俣晶
- 出版社/メーカー: 技術評論社
- 発売日: 2009/05/22
- メディア: 大型本
- 購入: 13人 クリック: 143回
- この商品を含むブログ (24件) を見る