StringBuilder是否比连接十几个字符串慢?

min*_*d1n 2 .net c# string stringbuilder

StringBuilder是否比连接十几个字符串慢?编译器如何优化字符串连接,以便使用"+"连接十几个字符串将比StringBuilder更好?

从一本书(Ben Watson编写)中可以看出:

字符串连接:对于已知(在编译时)数量的字符串的简单连接,只需使用'+'运算符或String.Concat方法.这通常比使用StringBuilder更有效.string result = a + b + c + d + e + f; 在字符串数量可变且可能大于几十个之前,不要考虑StringBuilder.编译器将以减少内存开销的方式优化简单字符串连接.

Asi*_*sik 8

String.Concat效率更高,因为它从一开始就知道所有的字符串长度.因此它可以分配一个具有恰当长度的缓冲区,将字符串复制到其中并返回该缓冲区.

StringBuilder必须分配一个小缓冲区,每次调用时都要重新分配和复制Append,以使其耗尽空间.最后的调用ToString()还必须分配另一个缓冲区.

所以String.Concat当你事先知道你有多少弦时使用; StringBuilder当你不这样做时使用.

在C#中,对+运算符的链接调用会自动转换为单个调用String.Concat.

  • 如果你连接字符串*常量*,*编译器*将已经执行连接. (2认同)