在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
发布于 2012-04-29 05:46:46
.NET框架的版本在这里很重要,因为StringBuilder.Append和StringBuilder.AppendFormat的实现在各个版本之间可能有很大的不同。在.NET框架4中,(1)比(2)更快,但由于连接(子)字符串(从而复制)所造成的开销,(1)仍然是低效的。这甚至比(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");
}
我在我的计算机(英特尔Core2 Q9400、Windows Server 2008 x64、.NET Framework4.0、发布模式)上测量了这些结果:
https://stackoverflow.com/questions/10367625
复制相似问题