最近为了进行Unity内存优化,读了非常多的文章,现在暂时草草整理如下.
- 不要直接用==比较tag, 使用tag.CompareTo(otherTag) == 0, 可以避免生成多余的GC byte. todo:生成多少(180?)
- 避免使用foreach来遍历数组(还是一切范型?),使用for(;;)可以避免生成多余的GC byte
- 数据容器尽量使用Struct, 而不是Class
- GetComponentInChildren实现为自己的无GC版本
- string的拼接避免+, 使用text.StringBuilders来实现
- 对频繁的scope-bound的固定长度数组,尽量用成员变量数组来替代,进行重用, 只分配一次堆内存。或者使用struct代替。比如Vector3[4]变成Struct, 里面有4个Vector, 可以把数据全部分配到栈上.
- 尽量避免IEnumerable的方法
- 把类方法放入delegate或者Func<>会导致Boxed(装箱)
- 尽量重用new出来的类,而不是重复new. 建立对象池
----------------------------------------------
怀疑有object有泄漏,没有被gc的时候,可以尝试在class中的ctor和dtor, 及各种clone函数中加入自己的计数,在合适地方打印出该class静态count的数值,确定是否被释放。
使用Object.FindObje