string與stringbuilder的區別


   String 對象是不可改變的。每次使用 System.String 類中的方法之一時,都要在內存中創建一個新的字符串對象,這就需要為該新對象分配新的空間。 

    例如:   string a="a";a+="b";,每次在后面追加都會重新申請一個能放字符串的內存空間;

    string Interning(字符串駐留)指的是通過維護一張表來存放字符串。CLR內部維護了一個哈希表(Hash Table)來管理其創建的大部分string對象,其中key為string本身,而value為分配給對應string的內存地址。

    public static string Intern(string str);

    public static string IsInterned(string str);

    兩者的處理機制都是在哈希表中查找是否存在str參數字符串,如果找到就返回已存在的string對象的引用,沒有找到,Intern方法將該str字符串添加到哈希表,並返回引用;而IsInterned方法則不會向哈希表中添加字符串,而是返回null;

 StringBuilder 對象是動態對象,允許擴充它所封裝的字符串中字符的數量,但是您可以為它可容納的最大字符數指定一個值,當修改 StringBuilder 時,在達到容量之前,它不會為其自己重新分配空間。當達到容量時,將自動分配新的空間且容量翻倍。可以使用重載的構造函數之一來指定 StringBuilder 類的容量。

  例如: StringBuilder sb = new StringBuilder(); sb.Append("a")他不會頻繁申請內存空間,他會自動向后擴展。

兩者的區別:

 1. string 對象時恆定不變的,stringBuider對象表示的字符串是可變的。stringBuilder是.net提供的動態創建string的高效方式,以克服string對象恆定性帶來的性能影響。

 2. 對於簡單的字符串連接操作,在性能上stringBuilder並不一定總是優於string。因為stringBuider對象創建代價較大,在字符串目標連接較少的情況下,過度濫用stringBuilder會導致性能的浪費,只有大量的或者無法預知次數的字符串操作,才考慮stringBuilder來實現。事實上,一般連接次數設置100次以內,根本看不出兩者的性能差別。

3. 當修改字符串信息時,此時不許創建對象,可以使用stringBuilder對象。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM