哪一个提供更快的字符串操作:StringBuilder与String

时间:2012-01-20 20:41:39

标签: c# .net

  

可能重复:
  String vs StringBuilder

我知道.NET字符串是不可变的,这就是为什么每次我们改变它时都会创建一个新的字符串对象(插入,追加,删除等)。

这听起来很合理,为什么我们仍然使用.NET String类函数而不是更快的StringBuilder?

3 个答案:

答案 0 :(得分:3)

StringBuilder在循环中重复(非编译时)连接的速度更快。

对于普通的字符串操作,它们的执行效果相同。

特别是,a + b + c编译为String.Concat(a, b, c),它分配一个缓冲区,并且比字符串生成器快或快。
StringBuilder仅比多个单独的Concat更快,因为每个Concat都需要创建一个新的缓冲区。

答案 1 :(得分:2)

简单:它更容易,性能很少成为问题。除非项目另有特别要求,否则可维护性更为重要。

哪个更容易?这样:

public override string ToString() {
    return this.LastName + ", " + this.FirstName;
}

还是这个?

public override string ToString() {
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append(this.LastName);
    sb.Append(", ");
    sb.Append(this.FirstName);
    return sb.ToString();
}

不可否认,您可能会使用varusing System.Text;,但它仍然要复杂得多,而且可读性要低得多。并且StringBuilder主要用于某种形式的循环中的连接,因为否则操作可以被优化,因此您很少需要使用它们。

答案 2 :(得分:0)

查看StringStringBuilder的MSDN文章,String上有几种不在StringBuilder上的方法。 TrimIndexOfPad[Left|Right]ToUpperToLower仅举几例。最重要的是,正如minitech指出的那样,StringBuilder是一种痛苦的工作。如果你有很多字符串操作,StringBuilder很棒。但对于简单的东西,String效果很好。