打開始跟 app memory 奮戰,摸索了好一陣子,不管是跑在 andorid 還是 Ios,之前做 WebPlayer 的經驗都派不上用場,也好在網路上資源很多,只要不恥繁找就能找到你所想要的,在此分享的主要是 android(ps. ~"~ 手頭上只有兩台 android 設備)。
新版 Unity 4.0 以後開始支援 memory profiler,從下圖可以看到 Simple/Detail 兩個不同的模式,Simple Profiler (圖1)主要是每個 frame 紀錄使用的 object 數量跟總記憶體,仔細看還分門別類有 Unity、Mono、GfxDriver....等;仔細看會發現有 Used Total 跟 Reserved Total,主要呢 reserved Total 會把預先跟 os 要的記憶體 pool 算進去,但實際遊戲使用到記憶體量並沒這麼大;且實際測試發現 Editor run 越多次 Reserved Total 會越大,追蹤記憶體主要還是以 Used Total 為主;切換成 Detail 模式(圖2),主要是點擊 Sample 按鈕可以擷取當下 memory 使用資訊。
(※ 在 Editor 下 Sample 會出 AssetDatabase 占用大量記憶體,這部分只會出現在 Editor;且在 Editor 下 Texture 載入記憶體會是 Inspector 看到的記憶體兩倍。)
圖1
圖2


但經過一陣子測試發現了一個滿冏的狀況,Unity memory Profiler 顯示的 Used Total 跟 app 實際使用記憶體並不相等,Unity Memory Profiler 顯示使用量大於 android meminfo 顯示量,從下圖3、4看到記憶體使用量約為 92 mb,而 Unity Profiler 顯示記憶體使用 115 mb,有可能是 profiler 造成記憶體額外增加或是 GfxDriver 預估差額造成,在不清楚的狀況下還是使用 Unity Profiler...畢竟 procrank 並不能告訴我們是誰用了這麼多記憶體!
圖3
圖4
在改版作業、包檔進行的同時,app 總是會忽然掛掉直接退回桌面,上網 google 了一下找到了有關解答,主要是 android dalvik virtual machine 會規劃每一個 dalvik VM 能夠執行的最大記憶體量,超過就會被 os 強制 shut down(此時應該就不是快拍進入休眠狀態了)。執行底下 command line 後就可以得到 dalvik heapSize 了。
adb shell cat /system/build.prop




你好~
回覆刪除我的2D遊戲 total memory 竟160MB, 其中GfxDriver就130MB,這正常嗎?
還有iOS有沒有類似的moniter tool?
請問你的數據來源是用 Unity Editor Profiler 取到的嗎?我先前測試的數據中 GfxDriver 都不會太高,舉例 Used Total ~ 約 80 mb,則 GfxDirver ~約 23mb
回覆刪除然後 Unity docu 對於 GfxDriver 解釋是 The estimated amount of memory the driver is using on Textures, Rendertargets, shaders and Meshdata,首先我認為這個值是概估的,而且是顯卡 memory 使用量(我猜測),
你可以大概去分析遊戲中用到 1k x 1k 介面圖總共有幾張大概就知道介面圖素佔比會多大,不過 130 mb 是
包含 UI、Texture、Geometry Data .... 等,所以單純去看 GfxDriver 是有點不準的,但這個值大或小是有討論
意義。
意見僅供參考 ~ 希望能幫的上忙