可能是重复问题:
String vs StringBuilder
你好,
我正在创建一个json字符串。我有一些json编码器可以接收对象并返回json字符串。我想将这些字符串组装成一个长字符串。
使用字符串构建器和声明一个字符串并附加字符串之间有什么区别呢?
谢谢。
可能是重复问题:
String vs StringBuilder
你好,
我正在创建一个json字符串。我有一些json编码器可以接收对象并返回json字符串。我想将这些字符串组装成一个长字符串。
使用字符串构建器和声明一个字符串并附加字符串之间有什么区别呢?
谢谢。
在.NET中,字符串是不可变的。每次进行字符串追加时,都会创建一个新的对象。
而使用StringBuilder时,则是在预先分配的缓冲区中建立字符串。
也就是说,对于每个普通字符串的追加操作,都会创建一个新的对象,并复制所有字符。由于所有的临时字符串对象最终都需要进行垃圾回收,因此连接大量字符串可能会成为性能问题。因此,通常在动态追加大量字符串时使用StringBuilder是一个好主意。
字符串是不可变的,每次在追加字符串时都需要分配新的内存。
StringBuilder 允许您向对象添加字符,在需要使用字符串表示形式时,调用 ToString() 方法即可。
StringBuilder的工作方式类似于string.format()
,比手动追加字符串或使用+
更高效。使用+
或手动追加会在内存中创建多个字符串对象。
复制。StringBuilder 每次不会创建字符串的新副本;据我所知,Append 方法只是将字节复制到预先分配的缓冲区中,而大部分情况下并不会重新分配新的字符串。这样做速度显著更快!我们在工作中一直在使用它。
string.Format使用StringBuilders。使用StringBuilder更优,因为您可以按照需要直接使用它,而无需Format()解释格式字符串中所有参数所需的开销。
想象一下,仅仅是string.Format()需要在格式化字符串中查找所有"{N}"序列...多了一项工作,是吧?
C# 中的字符串是不可变的,这使得连接字符串相对昂贵。 StringBuilder
通过创建缓冲区并将字符添加到缓冲区,在操作结束时将其转换为 string
来解决此问题。
在这里查看更多信息。