Image太大導致記憶體不足

Image尺寸太大,導致渲染的時候佔用太多內存,造成App卡頓

ChunPing Lai
Nov 19, 2020

最近寫了一個demo專案,使用SE2的時候跑得很順,用iPhone8跑卻會Lag,播放影片會卡頓,仔細一看,當下Memory竟然飆到兩百多MB!

打開Instruments監控了一下,完全沒有出現memory leak,研究了一下Allocations,發現是GPUImage使用了過多的memory

為什麼GPUImage使用了過多的memory呢?

圖片在記憶體使用上很容易產生干擾的佔用

  • 一個圖片文件從硬盤到展示需要經歷加載-解碼-渲染三步。
    以一個590KB大小,2048 * 1536表示的圖片為例,在3x設備上解碼後的內存佔用能夠達到10MB(2048 * 3 * 1536 * 3 * 4字節/像素)之多
  • UIImage會首先把圖片解碼加載到內存,內部空間坐標轉換也會帶來巨大的消耗
  • ImageIO能夠在不產生髒記憶體的情況下讀取到圖片尺寸和元信息,其內存消耗等於重新後的圖片尺寸產生的記憶體佔用

後來將以下Resize後,App使用的Memory少超多

  1. TableView上會用到的ImageView的圖片
  2. Video

App在iPhone8上也沒有再Lag了…

--

--