Unity內存優化之Heap內存優化

最近在做項目內存優化,計劃整理一個系列內容,本篇主要內容是Heap內存優化。

1】能顯示Destroy的,就不要null
2】對頻繁使用的對象,使用緩存池。
3】閉包,匿名函數,協程這些語法糖在最後都是一個一個的class,也是佔內存的,建議使用的時候生產出來,不用了就釋放掉。
4】各種配置表分塊按需加載。
5】頻繁被調用的函數中儘量少的分配空間,尤其注意在Update()中使用string進行拼接,拆分等操作。
7】複用集合類變量,如List數據,當有新數據時Clear()後重新添加而不是new List()
8】Text組件文本若經常變化,可以考慮將不變的文本和變化的文本拆爲多個Text組件
9】沒用的debug要去掉或者定義宏僅在Editor中使用。
10】在循環結構中,避免相同內容不停的調用或者new。比如:

    //這樣
    for(int i = 0, len = myList.Count; i < len; i++)
    {
        //do something
    }

    //這樣
    WaitForSeconds wait = new WaitForSeconds(1);
    while(true)
    {
        yield return wait;
    }

11】LINQ和正則表達式都會由於存在裝箱而產生垃圾,對性能要求比較高時應避免使用它們。
12】struct結構是值類型,但當結構中包含引用類型時,垃圾回收器也不得不對整個結構進行檢查,當有大的結構數組存在時就會加大垃圾回收的負擔:

public struct ItemD
{
    public string name;  //引用類型
    public int id;
}
private ItemD[] itemD;

13】類被引用的數量越多,垃圾回收需要檢查的工作則越大,儘量減少沒必要的類引用。
14】在一些切換場景,戰鬥結束等時機,主動GC

//安卓相比較ios,gc較慢,儘量少主動調用
System.GC.Collection();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章