C#中的字符串连接内存使用情况

时间:2013-05-08 02:52:12

标签: c# string string-concatenation

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

在方法1的情况下,只需要创建一个字符串

1) "Test string Content"

在这两种方法中,方法1应该是优选的

当你需要构建一个涉及组合许多字符串值的字符串时,

StringBuilder类更有效。

答案 2 :(得分:0)

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