c#中字符串连接的内存使用

本文关键字:内存 连接 字符串 | 更新日期: 2023-09-27 18:12:49

这两种字符串连接模式消耗的内存量相同吗?

//Method 1
String testString = "Test " + " string " + " content";
//Method 2
String testString = "Test ";
testString = testString + " string ";
testString = testString + " content";   

我们应该避免这两种方法而使用StringBuilder类吗?

c#中字符串连接的内存使用

方法2会导致更多的内存分配,应该创建字符串对象来存储以下组合

1) "Test "
2) " String"
3) "Test string"
4) " Content"
5) "Test String Content"

对于方法1,只需要创建一个字符串

1) "Test string Content"

两种方法中首选方法1

StringBuilder类在需要构建包含多个字符串值的字符串时效率更高。

是的,StringBuilder是更好的选择。在你描述的所有其他情况下,你正在创建多个新字符串,因为字符串在c#中是不可变的,不能改变。这会导致c#通过创建新字符串来模拟对字符串的更改。

方法一可以转换为单个字符串。不需要连接固定的子字符串来构建字符串

在我看来,这两种方法有很大的不同。构建之后,在方法1中,字符串testString = "测试字符串内容",但是在方法2中,字符串testString = "Test ",在运行时,它们也是不同的,在方法1中,string testString只是在不可变中引用一个地址,但在方法2中,clr在堆中分配新的内存并将字符串组合在一起。我认为StringBuilder是一个很好的方式来组合字符串频繁。