當前位置:成語大全網 - 書法字典 - 對象池隊列字典

對象池隊列字典

壹。內存優化

1.內存泄漏

在最近的項目中使用了C11的智能指針。經過壹年的使用,證明這是壹個成功的選擇。雖然沒有自我管理的焦慮,但它增加了內存泄漏的機會。畢竟不是每個人都能完全理解和掌握shared_ptr的使用方法。建議使用cocos2dx自帶的輕量級智能指針,采用引用計數,不存在C11的智能指針循環引用等容易導致引用計數異常的問題。

2.緩存(材質緩存、向導幀緩存)管理

有必要為removeunused的緩存引入壹個過渡場景,然後預加載下壹個場景所需的資源。cocos2dx提供了壹個api來查看內存中的所有緩存。作為開發人員,我們必須完全熟悉內存中的這些緩存,並能夠及時判斷哪些材料是冗余的。

這裏還要提壹點,安卓用pkm,ios用pvr代替jpg是非常必要的。尤其是8000*8000的超大地圖。

3.高性能對象池

傳統對象池只有壹個保存所有對象的列表,每次都使用循環遍歷來查找未使用的對象。

這裏的優化是添加壹個隊列來存儲所有可用的對象。每次使用對象時都會執行Push_front,每次使用都是通過pop_front獲得的。

2.CPU優化

1.近似數學函數

平方根、三角函數近似替換算法、計算兩點之間的距離(曼哈頓距離、牛頓叠代或與平方值比較)、位移運算(用於頻繁的2的n次方乘除運算)等。

2.算法

事實上,算法的選擇滲透在每個功能模塊中,即使它很小。對於我們這些不是專門研究算法的人來說,算法更多的是壹種意識。拒絕所有時間復雜度為O(n * n)的操作,永遠不要高估CPU的計算性能,在現有操作上爭取更低的計算量。然後選擇適合自己項目的算法。

框架

框架是壹種不好的情況,因為優化可能在最後。確實有壹些cpu密集型計算需要進行成幀甚至線程化。

PS:空間換時間。其實以上三篇文章,包括我的高性能高斯模糊算法,基本都是針對cpu的優化,是以空間換時間。

3.GPU優化(繪圖調用優化)

1.超大型圖的切片

太小的切片對drawcall有很大影響。目前使用最大化切片2048*2048,圖片以壓縮格式存儲在緩存中。

2.組合(多攝像機場景)

對於有許多相機的場景,因為底層是壹個遍歷相機,每個相機執行壹次場景的所有繪制。

因此,在組合圖片時需要根據相機對圖片進行分層組合,不要將不同相機的圖片組合在壹起。

作為發展,我們應該能夠根據我們看到的場景估計drawcalls的數量,並在判斷異常時逐步優化不同級別的drawcalls數量。