正確操作字串
引言:
字串是使用很頻繁的一種資料型別,
如果使用不慎,則會為一次字串操作所帶來的額外性能開銷而付出代價,
下面從這幾個方面來探討如何正確操作字串:
1.確保盡量少的裝箱,盡可能避免撰寫不必要的裝箱代碼
string str1 = "str1" + 8; //運行時會完成一次裝箱行為
string str2 = "str2" + 8.ToString(); //沒有發生裝箱行為,效率更高
2.避免分配額外的記憶體空間
在CLR中,string類是特殊的參考型別,string物件一旦被賦值就不可改變,
在運行是呼叫System.String類中的任何方法或進行任何運算(如“=”賦值,“+”拼接),都會在記憶體中創建一個新的字串物件,
要為該新物件分配新的記憶體空間,
private void Method()
{
string str1 = "abc";
str1 = "123" + str1 + "456";
//以上代碼創建了3個字串物件,并執行了一次string.Concat方法,會帶來運行時的額外開銷,
}
3.使用StringBuilder類
微軟提供的StringBuilder型別可以彌補String的不足,
StringBuilder不會重新創建一個string物件,它的效率源于預先以非托管的方式分配記憶體,
如果StringBuilder沒有預先定義長度,則默認分配的長度為16,
當StringBuilder字符長度≤16時,StringBuilder不會重新分配記憶體;
當長度大于16小于32時,StringBuilder會重新分配記憶體,使之成為16的倍數,
StringBuilder指定的長度要合適,太小了需要頻繁分配記憶體,太大了則浪費空間,
public static void Method1()
{
StringBuilder sb = new StringBuilder("我");
sb.Append("是");
sb.Append("一個");
sb.Append("程");
sb.Append("序");
sb.Append("員");
string str = sb.ToString();
}
4.使用string.Format方法
string.Format方法在內部使用StringBuilder進行字串的格式化,可以簡化StringBuilder操作,
public static void Method2()
{
string str = string.Format("{0}{1}{2}{3}","我","是","一個","程式員");
}
5.使用內插字串 $
內插字串$是string.Format的語法糖,可以更直觀的表達引數,
public static void Method3()
{
var name = "小明";
var year = 20;
var job = "程式員";
var str = $"{name}的年齡是{year},作業是{job}.";
//注意:
//上條內插字串中的year是int型別,會發生裝箱操作,影響性能
//可以優化為:var str = $"{name}的年齡是{year.ToString()},作業是{job}.";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/285343.html
標籤:C#
