關於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。
在這裏插入圖片描述

4. GC的作用 :
在這裏插入圖片描述
我的理解是,這種GC相當於自動實現C++中的free和delete等操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章