앱 메모리 사용량 줄이기
앱 메모리 사용량을 줄여야 하는 이유:
- 사용자가 더 나은 경험을 할 수 있다는 것입니다.
- 앱 실행 속도가 빨라질 뿐만 아니라 시스템이 더 잘 수행될 것입니다.
- 앱이 메모리에 더 오래 유지됩니다.
- 다른 앱은 메모리에 더 오래 남아 있습니다.
- 거의 모든 경우에 안 하는 것보다 더 좋습니다.
클린 & 더티 페이지 (Clean & Dirty pages)
힙에 여러 개체를 보유할 수 있는 페이지에 제공된 메모리와 일부 개체는 여러 페이지에 걸쳐 있을 수 있습니다.
각 페이지는 일반적으로 16KB이며 클린하거나 더티해질 수 있습니다.
앱의 메모리 사용량은 페이지 수에 페이지 크기를 곱한 것입니다.
예시:
가득차지 않은 4페이지로 메모리 매핑된 50KB인 JPEG가 있는 경우
이것의 좋은 예는 다른 용도로 사용할 수 있도록 가득 차지 않은 4페이지로 메모리 매핑된 50KB인 JPEG가 있는 경우입니다.
메모리 압축
iOS에는 전통적인 디스크 스왑 시스템이 없는 대신 메모리 압축을 사용합니다. (iOS 7에서 도입)
캐싱을 사용하기 위해 사전을 사용하는데, 이는 이제 총 5페이지를 사용하게 됩니다 그러나 만일 잠시 동안 이 사전에 액세스하지 않게 될 경우, 시스템이 임의의 공간이 필요할 경우 한 페이지로 압축할 수 있지만, 나는 공간을 절약하거나 4개의 추가 페이지를 둘 수도 있습니다.
캐시를 할 때 CPU가 반복 작업을 하지 않도록 하기 위해 너무 많이 캐시해서는 안 되며, 만일 너무 많이 캐시하면 모든 메모리를 사용하게 되어 시스템에 문제가 발생할 수 있습니다.
기기에 따라 한도가 변경되며, 따라서 4기가바이트 장치처럼 1기가바이트 장치에서 동일하게 많은 메모리를 사용할 수 없습니다.
이미지
이미지의 경우 메모리 사용이 파일 크기가 아니라 이미지의 크기와 관련이 있다는 것입니다.
예시:
2048 * 1536
길이가 2048이고 너비가 1536이고 이미지 크기가 590KB인 이미지가 있는 경우 메모리에 590KB를 할당하지 않습니다. 그러나 실제로 얼마나 많은 메모리를 사용합니까? 10MB, 예 10MB는 엄청나죠. 이 10MB를 어떻게 계산할 수 있습니까?
2048픽셀 x 1536픽셀 x 픽셀당 4바이트
이미지는 iOS에서 어떻게 작동할까요?
로드, 디코딩 및 렌더링 단계가 있습니다.
로드: 압축된 이 590킬로바이트 JPEG 파일을 메모리에 로드합니다.
디코딩: 해당 JPEG 파일을 GPU가 읽을 수 있는 형식으로 변환합니다. 이제 압축을 풀어야 10MB가 됩니다.
왜 4바이트인가?
SRGB: (표준 레드 그린 블루)
이제 SRGB 형식으로 얻은 픽셀당 4바이트입니다. 이것은 일반적으로 그래픽의 이미지가 가장 일반적인 형식입니다. 픽셀당 4비트이므로 빨간색에 1바이트, 녹색에 1바이트, 파란색에 1바이트 및 알파 구성 요소가 있습니다.
UIImage와 ImageIO 비교
UIImage는 크기 조정 및 크기 조정에 비용이 많이 듭니다.
• 원본 이미지를 메모리에 압축 해제합니다.
• 내부 좌표 공간 변환은 비용이 많이 듭니다.
ImageIO는 메모리를 더럽히지 않고 이미지 크기와 메타데이터 정보를 읽을 수 있습니다.
ImageIO는 크기가 조정된 이미지의 비용으로 이미지 크기를 조정할 수 있습니다.
요약
메모리는 유한하고 공유되는 자원입니다.
Xcode에서 실행할 때 메모리 사용량을 모니터링하세요.
iOS에서 이미지 형식을 선택하도록 하세요.
이미지 다운샘플링에 ImageIO 사용하세요.
화면 밖에 있는 대용량 리소스 언로드하세요.
메모리 그래프를 사용하여 메모리 사용 공간을 더 이해하고 줄여보세요
출처: WWDC 애플
source: https://mattsaedi.medium.com/deep-dive-into-ios-memory-db0b685e7905
'Develop > iOS' 카테고리의 다른 글
Xcode 정의로 이동하지 않고 우측 에디터에서 보는 방법 (0) | 2022.11.13 |
---|---|
Xcode Build 실행 시 명확하게 표시하는 방법 (0) | 2022.11.13 |
iOS 시뮬레이터에서 URLScheme을 빠르게 여는 방법 (0) | 2022.10.12 |
rbenv 환경에서 cocoapods 최신 버전 설치 방법 (0) | 2022.10.12 |
Xcode Extension이 사라진 경우 해결방법 (0) | 2022.05.06 |