尽可能不要在 *Update() 事件里分配内存
TL;DR
我还没验证过以下事实是否完全正确,因为需要对 UdonVM 进行逆向工程。
在 Udon 中,如果你在 *Update()
事件中创建新的对象,或者把 struct 塞进一个新的变量或添加到数组都会导致新的内存分配。
在 *Update() 事件中分配内存有如下的坏处
需要 Unity 大师帮我审一下。
- 在 .NET 中装箱和拆箱都是开销比较大的操作,这会增加你的帧耗时,进而影响到游戏的性能表现。
- 分配大量的一次性对象还会导致一个问题:GC 不得不执行会冻结代码运行的全面的非增量收集,而不是将工作量分摊到多个帧的增量模式来回收这些内存。这会导致游戏频繁的被冻结。
这是一个给 VR 用户催吐的好方法。 - 待补充...
正片?
如果你是个对 .NET 有一定了解的好奇宝宝,你可能会发现我上面写的东西和你对 .NET GC 的认知不太一样。
哎呀我还要解释 Unity 的 GC 是怎么工作的,还要解释为什么他要这么干,但是我自己都不知道!