Unity記憶體優化 物件池

2021-10-09 08:41:28 字數 1622 閱讀 3728

為什麼用物件池?

作用:因為mono內存在unity中不能手動釋放,當其記憶體超過上限時,會先觸發gc釋放沒有用到的記憶體空間,如果還不夠則會擴充。其容量一旦被撐大,專案所佔的記憶體就會跟著增大。使用物件池可以減少物件建立,緩解記憶體壓力。

物件池示意 這裡通過乙個棧儲存物件

m_maxcount 表示最大儲存個數

m_norecyclenum 用來記錄未歸還的物件

public

class

classobjectpool

where t :

class

,new()

}///

/// 從池中取物件

///

/// 如果池是空的則建立

///

public

tspawn

(bool create_if_pool_empty =

true)}

if(res !=

null

) m_norecyclenum++

;return res;

}else

}return

null;}

///

/// 把物件放回池中

///

/// 還回物件

///

public

bool

recycle

(t obj)

methodinfo[

] methods = obj.

gettype()

.getmethods()

;foreach

(methodinfo info in methods));

}}m_pool.

push

(obj)

;return

true;}

}

將物件歸還到物件池,如果物件的資訊需要重置,則需要重置再歸還。可以在物件中新增重置方法,我這裡在歸還的時候使用反射呼叫

public

class

assetbundleitem

以上是物件池的基礎**,但是這樣還是可以 new 出多個相同型別的 classobjectpool,所以我採用乙個字典,將已建立的物件池快取起來統一管理

//快取objectmanager建立的物件池

protected dictionaryobject

> obj_dic =

newdictionary

<

type

,object

>()

;//獲得或者建立乙個物件池

//當有物件池的時候則直接取,沒有的時候按count的數量建立

public classobjectpool

getorcreteobject

<

t>

(int count =1)

where t :

class

,new()

return out_obj as classobjectpool

;}

Unity 優化快取池

1.給放入快取池的gameovject設定父節點 using system.collections using system.collections.generic using unityengine 快取池模組 1.dictionary list 2.gameobject和resources 兩個...

Unity記憶體優化

一 大概標準 1.紋理 40m 2.mono 30m 3.animation 20m 4.mesh 10m 6.font 10m 7.audio 5m 8.gfxdriver 25m 9.resourcemanager 視情況而定 跟 你resourcemanager裡放了多少檔案 該標準是我做 m...

Unity基礎 物件池

物件池是一種通過空間來換取時間的思想 佔記憶體,時間消耗少 適用性 頻繁建立 銷毀遊戲物件 字典 型別,物件 資料結構 dictionary 核心成員 1.通過物件池建立物件 2.物件 using system.collections using system.collections.generic...