Skip to main content

尽可能不要在 *Update() 事件里分配内存

TL;DR

我还没验证过以下事实是否完全正确,因为需要对 UdonVM 进行逆向工程。

在 Udon 中,如果你在 *Update() 事件中创建新的对象,或者把 struct 塞进一个新的变量或添加到数组都会导致新的内存分配。

在 *Update() 事件中分配内存有如下的坏处

需要 Unity 大师帮我审一下。

  • 在 .NET 中装箱和拆箱都是开销比较大的操作,这会增加你的帧耗时,进而影响到游戏的性能表现。
  • 分配大量的一次性对象还会导致一个问题:GC 不得不执行会冻结代码运行的全面的非增量收集,而不是将工作量分摊到多个帧的增量模式来回收这些内存。这会导致游戏频繁的被冻结这是一个给 VR 用户催吐的好方法。
  • 待补充...

正片?

如果你是个对 .NET 有一定了解的好奇宝宝,你可能会发现我上面写的东西和你对 .NET GC 的认知不太一样。

哎呀我还要解释 Unity 的 GC 是怎么工作的,还要解释为什么他要这么干,但是我自己都不知道!