字符串操作是編程中非常頻繁的操作,特別是在拼接字符串的時候。下面來說說字符串拼接的效率提升。
1. 減少裝箱
值類型與引用類型之間的轉換存在裝箱與拆箱操作;將值類型轉換成引用類型的操作叫裝箱,將引用類型轉換成值類型叫拆箱。
整數類型在與字符串進行拼接操作時,並不默認調用ToString()方法,存在裝箱操作。所以:
var str1 = "a"+1;//存在裝箱,效率低 var str2 = "a" + 1.ToString();//效率更高
2. 避免分配額外的內存空間
string對象(字符串對象)是個很特殊的對象,它一旦被賦值就不可改變。在運行時調用System.String類中的任何方法或進行任何運算(如“=”賦值、“+”拼接等),都會在內存中創建一個新的字符串對象,這也意味着要為該新對象分配新的內存空間。
var str1 = "a"; str1 += "b";//又創建了2個字符串對象,並且執行了一次string.Contact方法 var str2 = "a" + "b";//字符串不會在運行時進行拼接,而是會在編譯時直接生成一個字符串,等效於 str="ab";效率更高
3. 使用String.Format()代替“+”
String.Format是將指定的 String 類型的數據中的每個格式項替換為相應對象的值的文本等效項。同樣,我也可以用來拼接字符串,並且效率高於“+”。
string s1 = "a"; string s2 = "b"; var str1 = s1 + s2; var str2 = String.Format("字符1 {0}, 字母2 {1}", s1, s2);//效率高
4. 大量字符串拼接使用StringBuilder
StringBuilder是可變長度的,其首先在內存中分配固定的長度,當進行頻繁的插入和連接操作時,超出了內存中分配的長度會自動進行擴充,從而有效的節約了內存空間和減少了生成對象的時間。
var str1 = "a"; str1 += "b"; str1 += "c"; str1 += "d"; //效率更高,尤其是在處理大量字符串的時候或者是在循環里面 var str2 = new System.Text.StringBuilder("a"); str2.Append("b"); str2.Append("c"); str2.Append("d");
