性能优化——代码优化


  • 1:Transform的子类型过多时避免频繁地进行Transform操作,大量的子物体会带来大量的操作。
  • 2:避免频繁地Find、GetComponent。应该在Start时就获取;
  • 3:避免创建大量不必要的碰撞盒。
  • 4:使用gameObject.CompareTag(“XXX”)代替gameObject.tag,后者会产生额外的内存与性能消耗。
  • 5:使用消耗更小的运算:例如1/5使用1*0.2来代替、用位运算代替简单乘除。(不过在性能并不是非常非常敏感的地方可以忽略位运算这一条,毕竟可读性还是要的。
  • 6:使用内建的常量,例如Vector3.zero等等,避免频繁创建相同的对象。
  • 7:自己可以写一个工具类,使用Update替代简单的协程,例如等待若干秒等等,可以消除创建协程的消耗。(这句给了我很大的启发;协程会增加内存的消耗,但是它的延时功能又很方便;))
  • 8:String的相加操作,会频繁申请内存并释放,导致gc频繁,使用System.Text.StringBuilder代替
  • 9:不要动态的产生字符串,如Debug.Log("boo" + "hoo"),尽量预先创建好这些字符串资源
  • 10:使用对象池,不要频繁Instantiate 与Destroy;
  • 11:真实的物理(刚体)很消耗,不要轻易使用,尽量使用自己的代码模仿假的物理
  • 12:对于投射物不要使用真实物理的碰撞和刚体,用自己的代码处理;

   代码内存上的优化:

    • 1:在UI中使用池时考虑使用分级机制:在池中越不频繁出现的UI就应该更快地被销毁以释放内存,而频繁出现的UI则等待更长的时间。
    • 2:使用延迟加载的方式,一些不常用的资源在第一次使用的时候再进行加载。
    • 3:在使用池进行内存管理时特别要注意,当一个物体你不再需要的时候,请将其置为null。例如你封装了一个数组,其中装入了许多的对象,当你移除一个对象的时候或许并没有将其真正置空,而是移动了目前指向的位置,那么你本应移除的对象就泄漏了出去。
    • 4:不要主动调用GC。而是通过良好的代码,即时去除不需要的对象的引用可以更好地让我们使用GC来回收垃圾。
    • 5:AB优化内存,例如2D鱼机的BOSS图,都是比较占内存的,我们可以分开单独打包;BOSS出现的场景才加载这个场景的BOSS,其他的不要加载;过场景时,使用AssetBundle.Unload(true)删除这个AB的内存;然后加载下一个场景BOSS的AB;(BOSS都是直接生成,死亡时销毁的,因为BOSS比较难死,这点消耗比较小(主要还是方便,本来想写在对象池,但想了很久很难实现));
    • 5:Resources加载如上:不过简单很多;  不需要用时,Destroy,Resources.Load的就变成游离资源了;

             


内存优化详细可以看这里:https://www.cnblogs.com/dudu580231/p/7160547.html



以上很多观点都是网上查到的,部分自己的理解;



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值