首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#中StringBuilder Append与AppendFormat效率的比较

C#中StringBuilder Append与AppendFormat效率的比较
EN

Stack Overflow用户
提问于 2012-04-29 05:20:34
回答 1查看 5.9K关注 0票数 0

在C#中,1和2哪个更有效?

代码语言:javascript
运行
复制
StringBuilder sb = new StringBuilder();
sb.Append("my string " + myVar + " my string");     // 1
sb.AppendFormat("my string {0} my string", myVar);  // 2

我猜这个问题也可以换个说法:

代码语言:javascript
运行
复制
string y = "my string " + myVar + " my string";              // 1
string x = String.Format("my string {0} my string", myVar);  // 2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-29 05:46:46

.NET框架的版本在这里很重要,因为StringBuilder.Append和StringBuilder.AppendFormat的实现在各个版本之间可能有很大的不同。在.NET框架4中,(1)比(2)更快,但由于连接(子)字符串(从而复制)所造成的开销,(1)仍然是低效的。这甚至比(1)快2倍:

代码语言:javascript
运行
复制
StringBuilder sb = new StringBuilder();
sb.Append("my string");
sb.Append(myVar);
sb.Append(" my string");

更新

使用以下测试:

代码语言:javascript
运行
复制
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、发布模式)上测量了这些结果:

  • Test1: 10401 ms
  • Test2: 20262 ms
  • Test3: 5771 ms
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10367625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档