を上記の私のコメントは、お使いの環境であなたのパフォーマンスをテストする必要があることを意味します。 Stopwatchインスタンスを使用して、string.FormatおよびStringBuilder.AppendFormatを少なくとも100,000回実行し、Stopwatch.ElapsedMillisecondsの値を測定するループを作成します。これはおおまかにあなたに違いのアイデアを与えるでしょう。
鉱山環境では、2つのアプローチはかなり同じです。 100000ループ上の違いは、StringBuilderのために2/3ミリ秒の利点ですが、士気は次のとおりです。(あなたは絶対に明確に持っていない限り努力の結果に値するもの)
はMICROOPTIMIZATIONS
をしないでください。
サンプル:
string s1 = "Argument 1";
string s2 = "Argument 2";
string s3 = "Argument 3";
string s4 = "Argument 4";
string s5 = "Argument 5";
string s6 = "Argument 6";
string s7 = "Argument 7";
string s8 = "Argument 8";
string s9 = "Argument 9";
string result = string.Empty;
object[] data = new object[] { s1, s2, s3, s4, s5, s6, s7, s8, s9 };
Stopwatch sw = new Stopwatch();
sw.Start();
for(int x = 0; x < 100000; x++)
result = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8}", data);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
StringBuilder sb = new StringBuilder();
sw = new Stopwatch();
sw.Start();
for (int x = 0; x < 100000; x++)
{
sb.Length = 0;
sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7},{8}", data);
result = sb.ToString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
あなたは[あなたの馬を競う](https://ericlippert.com/2012/12/17/performance-rant/)はどうですか? – Steve
これは次のようなものです: 'string st =" "; for(int i = 0; i <9000; i ++) { st + = "dop"; } 'それは速いです!悲惨なループですが、なぜですか?それは9000個のオブジェクトを作成したからです。 'StringBuilder.Format'がテストによってオブジェクトを伝播するかどうかを知る方法? –
このような質問があるときは、最初に[reference source](https://referencesource.microsoft.com/#mscorlib/system/string.cs,691a34e179b91fdb)を見てください。 StringBuilderCacheは、フレームワークコードがうまくいかず、あなたの助けを必要としないことをあなたに納得させるべきです。 –