StringBuilder.AppendとStringBuilder.AppendFormatの実装は個々のバージョン間で大幅に異なる可能性があるため、ここでは.NETFrameworkのバージョンが重要です。.NET Framework 4では、(1)は(2)よりも高速ですが、(サブ)文字列の連結(したがってコピー)によって発生するオーバーヘッドのため、依然として非効率的です。これは(1)よりも2倍高速です。
StringBuilder sb = new StringBuilder();
sb.Append("my string");
sb.Append(myVar);
sb.Append(" my string");
更新:
次のテストを使用:
static void Main(string[] args)
{
string myVar = "abcdef";
Stopwatch stopwatch = Stopwatch.StartNew();
for (int j = 0; j < 10000; j++)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
//UNCOMMENT ONE OF THESE TESTS
//Test1
sb.Append("my string " + myVar + " my string");
//Test2
//sb.AppendFormat("my string {0} my string", myVar);
//Test3
//sb.Append("my string ");
//sb.Append(myVar);
//sb.Append(" my string");
}
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds + " ms");
}
コンピューター(Intel Core2 Q9400、Windows Server 2008 x64、.NET Framework 4.0、リリースモード)でこれらの結果を測定しました。
- テスト1:10401ミリ秒
- テスト2:20262ミリ秒
- テスト3:5771ミリ秒