0

C# では、1 と 2 のどちらがより効率的ですか?

StringBuilder sb = new StringBuilder();
sb.Append("my string " + myVar + " my string");     // 1
sb.AppendFormat("my string {0} my string", myVar);  // 2

質問は次のように言い換えることもできると思います。

string y = "my string " + myVar + " my string";              // 1
string x = String.Format("my string {0} my string", myVar);  // 2
4

1 に答える 1

13

StringBuilder.AppendStringBuilder.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ミリ秒
于 2012-04-28T21:46:46.187 に答える