記憶體洩露和優化

2021-08-19 16:11:18 字數 1122 閱讀 3111

記憶體洩露和優化

********************==概述

通過unityengine命名空間中的介面分配的記憶體,將會通過unity分配在native堆

通過system命名空間中的介面分配的記憶體,將會通過mono runtime分配在mono堆

resources.unloadunusedassets()//內部包括gc

gc.collect()

mono記憶體分為兩部分,已用記憶體(used)和堆記憶體(heap),

已用記憶體指的是mono實際需要使用的記憶體,

堆記憶體指的是mono向作業系統申請的記憶體,兩者的差值就是mono的空閒記憶體。

當mono需要分配記憶體時,會先檢視空閒記憶體是否足夠,

如果足夠的話,直接在空閒記憶體中分配,

否則mono會進行一次gc以釋放更多的空閒記憶體,

如果gc之後仍然沒有足夠的空閒記憶體,則mono會向作業系統申請記憶體,並擴充堆記憶體

********************=解決

常用字串進行快取

使用stringbuild

getcomponent 只在onstart用並且存起來

使用comparetag

resources.findobjectsoftypeall()進行資源的dump,可以根據需求dump貼圖、材質、模型或其他資源型別,只需要將type作為引數傳入即可。dump

成功之後我們將結果儲存成乙份文字檔案,這樣可以用beyond compare對多次dump之後的結果進行比較,找到新增的資源,那麼這些資源就是潛在的

洩漏物件,需要重點追查。

wetest(apk,上傳apk,cube(免root))

===uwa

===unity eagleeye 效能分析平台應用案例

===bugly

===github unity- memory profiler

===assetbundle browser

********************=引用

相信各位程式猿們或多或少都會聽到過記憶體洩漏這個名詞,但是對於一些新手猿來說,或許不是很了解。記憶體洩漏?是記憶體漏出來了麼?和霸氣側漏

一樣麼?讓我們先來看一下wikipedia的定義

====

記憶體洩露和記憶體溢位

一 記憶體洩露 1.定義 指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體的情況。記憶體洩漏並非指內存在物理上的消失,而是應用程式分配某段記憶體後,由於設計錯誤,失去了對該段記憶體的控制,因而造成了記憶體的浪費。2.洩露型別 1 堆記憶體洩漏 heap leak a.指利用malloc或new進...

記憶體洩露和記憶體溢位

size medium color red 記憶體洩漏是指分配出去的記憶體無法 了 color 記憶體洩漏指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體的情況,是應用程式分配某段記憶體後,由於設計錯誤,失去了對該段記憶體的控制,因而造成了記憶體的浪費。color red 記憶體溢位是指程式要求...

記憶體溢位和記憶體洩露

記憶體溢位是指應用程式系統中存在無法 的記憶體或使用的記憶體過多,最終使得程式執行要使用到的最大記憶體大於虛擬機器能提供的最大記憶體。看到知乎上的例子 你在畫本上畫畫,本子畫完了,畫到桌子上,就是記憶體溢位 是指程式中己動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程...