天天看点

关于UnityGC的一些心得

1. 对于协程函数,BeginSample、EndSample之间注意不能存在yeild return null,否则可能导致Unity客户端卡死、手机卡死等现象。个人分析:Begin和End配对分析的是单帧结果,出现yeild return null代表该区间将会分两帧甚至多帧完成。(网上看到的,不确定真实性)。

2. Profiler中WaitForTargetFPS是为了平衡显示器和显卡之间的帧率使用的:

WaitForTargetFPS

该参数一般出现在 CPU开销过低,且通过设定了目标帧率的情况下(Application.targetFrameRate)。当上一帧低于目标帧率时,将会在本帧产生一个WaitForTargetFPS的空闲等待耗时,以维持目标帧率。

解析:该项在Unity引擎的主循环中其实是最早执行的,即引擎实际上是根据上一帧的CPU耗时,在当前帧中通过增补WaitForTargetFPS的方式来将运行FPS维持到目标值。比如,目标帧率为30帧/秒,上一帧耗时15ms,为了保证一帧大约勇士33ms,那么当前帧中WaitForTargetFPS将会是18(33-15)ms,但是这一帧中其他耗时为27ms,那么在Profiler中这一帧的总耗时就变成了45(18+27)ms(15+45=30*2=60),同样的,如果这一帧的耗时少了,下一帧还可以补回来

因此,由该值造成了Profiler开销较高的现象,其实是耗时的“假象”,在优化过程中,你对它可以“视而不见”。

3. Unity自带的引擎代码,也就是manual part,是不含GC的,我们写的脚本里包含了FC。

关于UnityGC的一些心得

4. GC的作用 :

关于UnityGC的一些心得

我的理解是,这种GC相当于自动实现C++中的free和delete等操作。

继续阅读