1、"+"拼接
+拼接會每次會導緻新建立一個字元串,消耗記憶體。多個(10個以内)固定的字元連接配接可以使用"+"進行連接配接。編譯器會做相應的優化會依據加号次數調用不同參數個數的 String.Concat 方法。
例:
string str = str1 + str2 + str3 + str4;
會被編譯為 String.Concat(str1, str2, str3, str4)。該方法内部會計算總的 String 長度,僅配置設定一次,并不會如通常想象的那樣配置設定三次。
2、"$"拼接
$""可以直接将變量拼接到字元串中不用重新配置設定一個新的字元空間。
$"Name:{變量1};Age:{變量2}"
3、StringBuilder
StringBuilder内部有一個StringBuffer,連接配接操作不會每次配置設定新的字元串空間。隻有當連接配接後的字元串超出 Buffer 大小時,才會申請新的 Buffer 空間。
例:StringBuilder str1 = new StringBuilder(500);
for ( int i = 0 ; i < item.Count; i ++ )
{
str1.Append (item[i]);
}
Tips:StringBuilder 内部 Buffer 的預設值為 16 ,這個值實在太小。按 StringBuilder 的使用場景,Buffer 肯定得重新配置設定。經驗值一般用 256 作為 Buffer 的初值。當然,如果能計算出最終生成字元串長度的話,則應該按這個值來設定 Buffer 的初值。使用 new StringBuilder(256) 就将 Buffer 的初始長度設為了256。
4、避免不必要的調用ToUpper 或ToLower 方法
String是不變類,調用ToUpper或ToLower方法都會導緻建立一個新的字元串。如果被頻繁調用,将導緻頻繁建立字元串對象。這違背了前面講到的“避免頻繁建立對象”這一基本原則。
Compare 方法可以忽略大小寫,一定場景可以避免使用ToUpper或ToLower
5、最快的字元串大小比較方法
将String對象的Length屬性與0比較是最快的方法:if (str.Length == 0)
其次是與String.Empty常量或空串比較:if (str == String.Empty)或if (str == "")
注:C#在編譯時會将程式集中聲明的所有字元串常量放到保留池中(intern pool),相同常量不會重複配置設定。