unity常用的20個(gè)組件 unity將組件留在場(chǎng)景里,隱藏,消耗內(nèi)存嗎?
unity將組件留在場(chǎng)景里,隱藏,消耗內(nèi)存嗎?一是避免內(nèi)存泄漏,二是減少內(nèi)存分配。為了避免內(nèi)存泄漏,我們需要仔細(xì)檢查黑盒和白盒,這通常是由于設(shè)計(jì)不合理造成的。同時(shí),可以充分利用destroy()方法強(qiáng)
unity將組件留在場(chǎng)景里,隱藏,消耗內(nèi)存嗎?
一是避免內(nèi)存泄漏,二是減少內(nèi)存分配。
為了避免內(nèi)存泄漏,我們需要仔細(xì)檢查黑盒和白盒,這通常是由于設(shè)計(jì)不合理造成的。同時(shí),可以充分利用destroy()方法強(qiáng)制釋放非托管內(nèi)存。最好明確統(tǒng)一的資源管理機(jī)制。這方面有很多在線教程,所以我不想當(dāng)搬運(yùn)工。
減少內(nèi)存分配并不意味著它在任何時(shí)候都不會(huì)被分配。為了降低GC的頻率,應(yīng)該盡可能減少內(nèi)存分配。您可以使用profiler找出所有分配內(nèi)存的位置,然后根據(jù)經(jīng)驗(yàn)判斷是否進(jìn)行優(yōu)化。之前我大致整理了一些生成GC的操作,以供參考:
生成一個(gè)新的委托,例如,作為參數(shù)傳入一個(gè)方法
foreach the list
使用枚舉作為關(guān)鍵字來(lái)搜索字典(可能是因?yàn)槟J(rèn)的comparator GetHashCode時(shí)尚框,提供一個(gè)自定義比較器應(yīng)該可以解決它)
訪問(wèn)動(dòng)畫(huà)等組件
獲取SkinedMeshRenderer.bones皮膚網(wǎng)格渲染器或者網(wǎng)格.uvs屬性
yield return 0(建議用yield return null替換all)
call getComponentChildren(建議實(shí)現(xiàn)沒(méi)有GC的版本)