unity性能优化:字符串操作(一)

一:避免额外的装箱操作

  void example()
    {
        //1.
        string str1 = "my_num:" + 10086;
        //2.
        string str2= "my_num:" + 10086.ToString();
        ///尽量选择第二种方法来拼接字符串,减少额外的消耗
        /// 以第一种方法拼接字符串时,会产生额外的装箱行为,
        /// 而第二种调用的是整型中的tostring方法,直接操作内存来完成转换,效率更高
    }

unity性能优化:字符串操作(一)_第1张图片
二:重复修改或合并大量字符串时,最好使用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类型,只能使用此方法
    }

unity性能优化:字符串操作(一)_第2张图片

你可能感兴趣的:(自己的一些记录,unity,unity3d,c#)