一:避免额外的装箱操作
void example()
{
//1.
string str1 = "my_num:" + 10086;
//2.
string str2= "my_num:" + 10086.ToString();
///尽量选择第二种方法来拼接字符串,减少额外的消耗
/// 以第一种方法拼接字符串时,会产生额外的装箱行为,
/// 而第二种调用的是整型中的tostring方法,直接操作内存来完成转换,效率更高
}
二:重复修改或合并大量字符串时,最好使用StringBulider类
1.由于字符串是在堆上连续分配的引用类型,所以在修改字符串的时候,实际上是在堆上分配了新的空间,并修改储存在变量中的地址,而原本的字符串会在内存之中占用,等待下一次的清理,在大量操作的时候,会造成极大的浪费.
2.并且,在大量合并时,每一次"+"操作,都会进行一次堆分配,并且一次只合并两个字符串,在大量合并时,会产生十分巨大的内存浪费.
3.这个时候就需要使用StringBulider类了.
虽然StringBuilder类无法支持string类的多种方法,不过对字符串的修改都会在自身分配的内存块中,能够大大提升效率.
常用方法:
void example2()
{
StringBuilder myBulider = new StringBuilder("my name is LongYuYe,", 150);
//在初始化时设定好需要的容量,如果后续容量超过最大容量,会自动进行翻倍扩容
myBulider.Append("那你的名字呢?");
//追加字符串
string name = "jack";
myBulider.AppendFormat("嗯,你叫{0}啊", name);
//追加特定格式的字符串
myBulider.Insert(2, ".");
//在指定位置插入子字符串
myBulider.Remove(2, 6);
//移除,输入起始位置和删除的元素数量
myBulider.Replace(".","!");
//替换
myBulider.ToString();
//转化为字符串,StringBuilder类型无法强制转换为string类型,只能使用此方法
}