2010-01-04 139 views
1

.NET中的字符串和字符串生成器有什麼區別?字符串和字符串生成器

+0

可能的重複http://stackoverflow.com/questions/529999/when-to-use-stringbuilder – 2010-04-01 11:20:57

+0

可能重複的[字符串與StringBuilder](http://stackoverflow.com/questions/73883/string- vs-stringbuilder) – nawfal 2014-07-16 20:15:15

回答

5

字符串是不可變的類型。在執行像串聯這樣的字符串操作的批次時,它具有不良性能特徵。

另一方面,Stringbuilders通過保持一個增長的緩衝區來克服這個弱點,以便每個級聯不太可能需要分配一個新的字符串。

由於字符串構建器會添加一些開銷,所以在進行一些重要的字符串工作時(例如在循環中),它們才真正需要。如果你的代碼很快,不要擔心。如果不是,請使用一個分析器來查看這個問題在你的案例中是否重要。

最後一點:這個答案實際上與ASP.NET毫無關係 - 對於.net和其他很多語言的字符串也是如此。

+1

我認爲你的最後一段實際上比所有'真正'的答案都重要。 – ProfK 2010-01-04 05:36:36

1

字符串是immutable和stringbuilder是可變的。

在面向對象和功能 編程,一個不可變的對象是 對象,其狀態被創建後不能被修改 。這是 與可變對象的對比,其中 可以在創建後進行修改。

不可變對象通常是有用的 因爲 複製和一些比較昂貴的操作可以被省略,簡化 程序代碼和 加速執行。但是,如果對象包含大量可更改數據,則使對象不可變通常爲 。 因此,許多語言都允許 用於不可變和可變的 對象。

每次對字符串對象進行連接時,會使用新的引用創建新的字符串對象,並將其分配給該對象。較舊的對象仍然會在內存中。