C# String與StringBuilder
阿新 • • 發佈:2022-02-19
String
string本身是不可改變的,它只能賦值一次,每一次內容發生改變,都會生成一個新的物件,然後原有的物件引用新的物件,而每一次生成新物件都會對系統性能產生影響,這會降低.NET編譯器的工作效率。
String s1 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });
StringBuilder
StringBuilder類則不同,每次操作都是對自身物件進行操作,而不是生成新的物件,其所佔空間會隨著內容的增加而擴充,這樣,在做大量的修改操作時,不會因生成大量匿名物件而影響系統性能。
StringBuilder sb = newStringBuilder(5); //當指定分配大小之後,效能就會得到提升。如果超過指定大小系統會當前大小倍增,也就10,15,20。建議指定大小
在記憶體中的分配
字串一旦建立就不可修改大小,所以對字串新增或刪除操作比較頻繁的話。那就不要用String而用StringBuilder。
String a1 = "abc"; //分配固定的記憶體大小 a1+="def"; //銷燬原先的資料再來分配,代價比較昂貴 StringBuilder sb = new StringBuilder(20); //指定分配大小 sb.Append('abc'); //分配到堆區sb.Append('def'); //不會被銷燬,而是直接追加到後面。
String物件是不可改變的。每次使用System.String類中的方法之一或者是進行運算時(如賦值、拼接等),都要在記憶體中建立一個新的字串物件,這就需要為該新物件分配記憶體空間,而StringBuilder則不會。在需要對字串執行重複修改操作時,與建立新的 String 物件相關的系統開銷可能會非常昂貴。如果要修改字串而不建立新的物件,則可以使用 System.Text.StringBuilder 類。例如,當在一個迴圈中將許多字串連線在一起時,使用 StringBuilder 類可以提升效能。
文章轉載自: 快速開發平臺
地址:https://www.hocode.com/