.NET字符串性能问题

时间:2009-12-08 05:34:13

标签: c# .net performance string

从性能的角度来看,使用“Example1”会更好吗?我假设“Example2”会在每次迭代中在堆上创建一个新字符串,而“Example1”则不会...

例1:

StringBuilder letsCount = new StringBuilder("Let's count! ");
string sep = ", ";
for(int i=; i< 100; i++)
{
     letsCount.Append(i + sep);
}

例2:

StringBuilder letsCount = new StringBuilder("Let's count! ");
for(int i=; i< 100; i++)
{
     letsCount.Append(i + ", ");
}

3 个答案:

答案 0 :(得分:12)

.NET CLR比这更聪明。它是“interns”字符串文字,因此只有一个实例。

值得注意的是,如果您真的担心字符串连接,您可能希望将单个Append调用转换为两个追加调用。但实际情况是,两次呼叫的开销可能超过任何次要的连接成本。在任何一种情况下,除非在非常严格的条件下,它几乎是无法估量的。

答案 1 :(得分:2)

它们完全相同。

答案 2 :(得分:1)

实际上,更快的方法是

string letsCount = "Let's count! ";
string[] numbers = new string[100];
for(int i=0; i< 100; i++)
{ 
   numbers[i]=i+", ";
}
String.Join(letsCount, numbers);

See here