獻給正在做電商多圖項目的你,使用SDWebImage加載多圖片時內(nèi)存暴漲的解決方法

公司的一個電商項目,很多商品展示頁,tableView、collectionView都有用到,少不了的就是加載圖片,現(xiàn)在主流的加載圖片的開源庫,我想大家都用到SDWebImage。

昨天測試又發(fā)現(xiàn)一個Bug,持續(xù)使用App幾分鐘后,App閃退,Bugly也沒有記錄下崩潰的原因,在錄制了視頻之后發(fā)現(xiàn),頁面來回切換用不了多久就閃退。
首先考慮到的是控制器是不是沒有銷毀造成的內(nèi)存泄漏。

然后真機連線測試,各種內(nèi)存監(jiān)測,一頓操作,一氣呵成,perfect。

37855811.png

測試過后發(fā)現(xiàn)控制器是正常銷毀的,卻發(fā)現(xiàn)造成閃退的真正元兇,是突如其來的內(nèi)存暴漲。
看似平靜的列表,卻在滑動之后,內(nèi)存暴增200MB,而且不會被釋放,難受。

隨后又發(fā)現(xiàn),下載已經(jīng)存在在Cache中的圖片是內(nèi)存變化不大,但是下載新圖片內(nèi)存就會發(fā)生變化,同時下載任務(wù)不多時,問題也不大,要是同時下載一二十張圖片問題就來了,內(nèi)存不斷累加,至此,確定是圖片下載造成的問題。
百度Google一頓搜,基本操作。

一大堆標題黨,什么是下載分辨率高的圖引起的,什么不一定是下載大圖引起,分辨率高的圖能不大?唉看到這些標題黨我真的難受,關(guān)鍵是我還信了你們,讓我更難受,讓我和同事賭上了我的所有家當(一瓶水),我打賭肯定是后臺上傳的圖片大引起的,結(jié)果模擬器沙盒一頓測試,輸了,輸?shù)媚敲磸氐?,圖片不大,一張圖平均30K左右。

好了好了回正題,不吹比了,這里就是告訴大家一個解決問題的思路,從多方面去發(fā)現(xiàn)問題的本質(zhì),不喜勿噴。

在監(jiān)測內(nèi)存暴漲的同時,使用App內(nèi)的清理緩存功能,意外的發(fā)現(xiàn),清理Cache中的文件之后,暴增的內(nèi)存全部釋放掉了。中途也用了很多帖子中推薦的方法,試過但沒派上用場,網(wǎng)上的方法就是壓縮圖片的方式來解決問題,我想也只有在下載大圖或者分辨率高的圖片時才用得上。

最后說下我的解決方法吧,也是來自網(wǎng)上的帖子里的方法但是是我自己總結(jié)的,也有我自己的一些看法。我這里只在圖片加載完成后添加了一段代碼。

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];

此時內(nèi)存依舊暴漲,但在控制器銷毀時,暴漲的內(nèi)存會跟隨控制器一起釋放。

我看網(wǎng)上的帖子說在下載大圖時,這個方法不是很好用,那當我們都是大圖的時候我們該怎么解決呢,先壓縮再配合這個方法使用。

不過這里不建議去改SDWebImage的實現(xiàn)方法,End。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容