三十路SEの小遣い稼ぎ

ブログ初心者の小遣い稼ぎを目論むサイトです。目標の月2000円は達成できたので、自分が気になったニュースも合わせて紹介します。

今更だけどC#のStringBuilderの速度を検証してみた

【PR】

先日社内でソースレビューをしていた先輩が新人君に対して、
「これ!何でこんなソース書いてるの!何でもかんでもStringBuilder使えばいいってもんじゃないよ!これだったら使わないほうがレスポンスが出るよ!何やってんの!」
とブライトさんばりに説教しているのを見て「ほんまかいな?」と思い、検証してみることにした。
 
f:id:otyokko:20150125010428j:plain

新人君ソース

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#プログラミング ~新スタイルによる実践的コーディング

[完全版] 究極のC#プログラミング ~新スタイルによる実践的コーディング