instantiate 卡顿严重_Unity3D_记一次CPU卡顿的排查实践

这是一次CPU卡顿的排查实践,开发环境是Unity5.3.4p5 + uGUI

======

为了避免打log引起的额外消耗,所以以下分析基于log关闭后的Profiler数据

Debug.logger.logEnabled =false;

问题1:ConfigUtil.Get().Single(Func)

List  ConfigUtil.Get()内含List.AddRange()申请临时内存,相对GC Alloc和耗时较多;

T  List.Single(Func)多次遍历查找同一个List,耗时较多。影响范围较广。

修行状态的红点计算NinjaPracticeController.UpdatePracticeState()较为复杂,查询修行配置有多层循环嵌套,而且内层嵌套有多次重复计算,且频繁出现于回包中。比如心跳回包会计算修行红点状态,其他一些回包触发OnSyncSthChangeCommand的也会引起修行红点计算。

修改前(60次+60次):

image001.1471070551.jpg

image002.1471070551.png

image003.1471070552.jpg

将查询全量配置提前到for循环之前算好。并且classEvolveCfg和classUpgradeCfg这两项配置信息并不总是需要,而是根据底下if-else的条件局部需要,所以挪到实际需要的地方才计算。

修改后(40次+3次):

image004.1471070552.jpg

Single方法的调用还可以进一步优化(配置List转换为Map,然后for循环内按Key查找)。

更新忍者状态的NinjaController.UpdateNinjaState也有类似的现象:

image005.1471070552.png

初次加载忍者技能、忍者课程修炼也是如此:

image006.1471070552.png

image007.1471070552.png

其他模块的List  ConfigUtil.Get()调用,建议按需修改。

问题2:MaouOutline的数组重置操作

为达到更佳的描边效果,重写了ModifyMesh/ModifyVertices的实现ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值