StringBuilder在C#中附加vs AppendFormat效率

时间:2012-04-28 21:20:34

标签: c#

哪个在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

1 个答案:

答案 0 :(得分:13)

.NET Framework的版本在这里很重要,因为 StringBuilder.Append StringBuilder.AppendFormat 的实现在各个版本之间可能会有很大差异。在.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");
}

我在计算机上测试了这些结果(英特尔酷睿2 Q9400,Windows Server 2008 x64,.NET Framework 4.0,发布模式):

  • Test1:10401 ms
  • Test2:20262 ms
  • Test3:5771 ms