이미지 목록 성능 최적화 2: Downsampling

aralc·2021년 11월 22일
0

이전 글에서 WWDC 2018 > Image and Graphics Best Practices > Image Decoding 과정을 옮겼습니다.

앞서 옮긴 내용을 요약하자면, 메모리에 로드된 이미지 데이터는 Data Buffer 형태로 메모리에 보관됩니다. 이 Data Buffer가 실제 뷰에 그려지기 위해서는 Image Buffer로 변환되어야 합니다. 여기서 Data Buffer를 Image Buffer로 변환하는 과정을 decoding 이라 합니다.

Downsampling

Downsampling은 크기가 큰 이미지를 작은 크기의 뷰로 보여주고자 할 때, 용이하게 쓰일 수 있습니다. 이미지 본래의 크기인 Data Buffer를 뷰 크기만큼의 Data Buffer로 줄이고, 줄여진 Data Buffer를 Image Buffer로 옮기는 것이죠. 이 과정을 Downsampling이라 합니다.

디코딩 전 단계에서 이미지를 축소해 썸네일로 만들어 디코딩할 이미지 데이터의 크기를 줄입니다. 그럼 데이터 버퍼의 크기가 작아지고, 이미지 버퍼 크기도 작아질테니, 총 메모리 사용량을 줄일 수 있게 됩니다.

UIImageView는 랜더링할 때 크기가 작아진 이미지 버퍼에서 데이터를 가져올테고 따라서 이미지를 담고 있는 원본 데이터 버퍼를 폐기할 수 있습니다.

Example Code

  • kCGImageSourceShouldCache: false로 값을 할당할 경우, Core Graphics framework에 원본 데이터 버퍼의 디코딩 중단을 요청하게 됩니다. 이미지 데이터 객체를 생성할 뿐이니, 곧바로 이미지를 디코딩 하지 말아라 라는 뜻이죠.
  • kCGImageSourceShouldCacheImmediately: 썸네일 생성을 요청하면, 그 때 이미지 디코딩을 시작하라고 Core Graphics에 알리는 옵션입니다.

    Core Graphics framework
    이미지 랜더링을 수행하는 프레임워크로, CPU를 많이 소모하는 프레임워크이다 보니 main thread에서 downsampling이 다량 발생하지 않도록 방지해야 합니다.




참조 출처
https://developer.apple.com/videos/play/wwdc2018/219

profile
aralc

0개의 댓글