Gameobject实例化的消耗Instantiate.Copy、.Produce、.Awake分析

序列化和反序列化占了很大一部分,实例化是通过序列化和反序列化来完成深拷贝的,而序列化的中间数据是纯消耗,也就是Copy。另外,所有的GameObject和MonoBehaviour都算在GC Alloc里,但并不一定会GC,这是Produce。再另外Instantiate的时候一定会调用组件的Awake,也可能会调用OnEnable(组件是激活的),这也是一笔消耗,即Awake。

优化方法,呃~~~对象池吧,针对于大量的可被重置状态的重复对象,例如粒子特效或者人物血条之类的。不过,看你的Profiler的信息,应该是UI。UI的话,可以考虑使用LRU来做延迟销毁。还有一个可能的办法就是把大型的UI拆成小块,做分帧实例化,我没试过,感觉挺麻烦的,但是可以避免单帧的CPU和内存高点,但是总的肯定是更高的。

你可能感兴趣的:(Gameobject实例化的消耗Instantiate.Copy、.Produce、.Awake分析)