SDWebImage 메모리제한옵션 설정 (.imageScaleDownLimitBytes)
안녕하세요 물먹고하자 입니다 :)
오늘은 이미지 라이브러리(SDWebImage) 사용중
픽셀이 큰 (24000 * 13000) 5MB 기준 메모리가 터지는 현상이 나와
옵션찾아보고 적용했던 내용 공유드립니다.
1. SDWebImage 메모리용량 제한옵션 키값
💡 imageScaleDownLimitBytes : 많은 Ram을 차지했는지 모를때 바이트 제한 기준을 정하는 키값 (OOM 피하는데 도움)
참고이미지 : 픽셀큰 이미지 (24000 * 13000) 5MB 호출시 순간 2.6GB 메모리가 튐
2. 샘플코드
💡 블로그 작성기준 SDWebImage 5.19.7 사용중
Git : https://github.com/SDWebImage/SDWebImage
// (신) 픽셀사이즈 (메모리 관리부분 조절)
self.imageView.sd_setImage(
with: url, // url 영역
placeholderImage: nil,
options: [],
context: [
.imageScaleDownLimitBytes: 20 * 1024 * 1024 // 20mb 메모리제한
],
progress: nil
) { img, err, type, url in
self.layout()
self.newLoadingView?.stopLoadingView()
self.newLoadingView = nil
if let err = err {
let message = LanguageN.getKey("다운로드_실패했습니다")
DzCustom.makeToast(message: message, type: .error)
print("이미지 다운로드 실패: \(err.localizedDescription)")
}
}
3. 추가실험
💡 메모리 용량제한을 10MB, 50MB 추가 설정해보고 퀄리티 비교해보기
- GIF 이슈건 체크
용량제한 | 최대메모리 | 퀄리티 |
---|---|---|
10MB | 기존130MB -> 200MB | 퀄리티 차이X |
50MB | 기존150MB -> 300MB | 퀄리티 차이X |
여기까지 기준으로는 이미지 퀄리티 차이없고 당연히 적게 잡은게 좋다고 판단했으며
추가로 100MB 용량의 이미지 APNG 등 테스트 했을때 고려하여 제 기준으로는 20MB로 설정함
💡GIF 이슈 부분
용량을 제한하고 나니깐 GIF파일을 뭉개지는 현상이 발생
내부적으로는 GIF 파일일때 50MB로 설정해도 GIF일때는 뭉개지는 현상이나와 250MB 예외처리 진행했습니다.
마무리
이번건은 코드기준으로는 SDWebImage에서 제공하는 옵션으로 금방해결 하긴했네요.
제품사용하는 고객층의 종류가 많아서 그런지 대용량 이미지는 많이 봤어도
큰픽셀 저용량은 처음본것 같습니다. (24000 * 13000) 5MB
오늘은 이만~
즐거운 코딩 되게요.
끝.
댓글
댓글 쓰기