공식문서

Reducing Your App's Memory Use

motosw3600 2022. 1. 3. 16:10

Reducing Your App's Memory Use

메모리 사용 metric을 분석하고 메모리 효율성을 최대화 하도록 변경하여 앱의 성능을 개선하십시오


Overview

디바이스의 메모리(RAM)는 app, OS process, kernel에서 공유하는 제한적인 리소스이다. iOS는 다양한 메모리 요구사항을 충족하는 기술이 있지만 이러한 기술들은 많은 속도와 응답성을 소비한다. 예를들어 iOS는 앱이 백그라운드에서 실행중일 때 memory-intensive app을 solid-state storage로 전송할 수 있다. 이때 앱이 포그라운드로 돌아오거나 백그라운드 작업을 실행하려고 할 때 지연이 발생한다.

 

만약 앱이 너무많은 메모리를 사용하고 있다면, iOS에서 warning을 보내준다. 너는 crash report의 형식으로 이러한 warning의 알림을 받을 수 있다. EXC_RESOURC 예외 및 MEMORY subtype 리포트에서 앱이 메모리 제한에 도달했음을 나타낸다. 이것은 iOS가 앱을 종료했다는 의미가 아니라 메모리 사용문제를 감지했음을 의미한다. 예외를 발생시키는 메모리 제한은 디바이스에 따라 다르며 앱이 메모리 제한을 초과하게 되면 iOS는 프로세스를 종료한다. 포그라운드에서 앱이 종료됬을 때 유저는 앱이 사라지는것을 볼 수 있다. 다음에 유저가 앱을 열 때 처음부터 다시 로딩하며 백그라운드에서 시작할때보다 더 오래걸린다.

 

디바이스가 앱과 iOS process 사이의 메모리를 공유하므로 앱이 너무많은 메모리를 사용하면 전체 기기에서 사용자 경험이 손실될 수 있다. 앱이 사용하는 메모리양을 제한하면 사용자가 다른앱을 사용할때도 이점을 얻을 수 있다.

 

Understand Memory-Use Metrics

Xcode Organizer와 MetricKit은 각각 앱의 메모리 사용에 대해 두개의 metric을 제공한다. 첫번째 metric은 peak메모리 사용으로, 취한 샘플에서 가장 높은 메모리 사용이다. iOS는 하루종일 주기적으로 앱의 메모리 사용량을 샘플링하여 metric을 수집한다. 두번째 metric은 앱이 백그라운드로 들어갈 시 측정되고 정지시 관찰된 메모리 사용량이다.

 

iOS는 사용중인 메모리 페이지 수에 페이지 크기(보통 16KB하는 페이지)를 곱하여 메모리 사용을 측정한다. iOS가 해당 바이트를 저장하기 위해 새 페이지를 할당하는 경우 메모리에 단일 바이트를 사용하면 메모리 사용이 16KB 증가할 수 있다.

앱의 실행파일 또는 연결된 라이브러리 및 프레임워크에 정의된 데이터 구조는 Memory-Use Metrics에 기여한다. 앱이 런타임때 할당하는 메모리는 처음에는 metric에 기여하지 않는다. 이러한 메모리는 clean메모리라고 하고 iOS는 이것을 저장하기위한 물리적 RAM을 할당할 필요가 없다. 앱이 할당된 메모리를 사용할 때 이것은 dirty메모리라고 하고 iOS는 아래 그림과 같이 컨텐츠를 저장하기 위해 RAM을 할당한다. Dirty 메모리는 memory-use metric에 기여한다.

 

View Data on Memory Use

Xcode Organizer창 또는 MetricKit을 사용하여 앱의 메모리 사용량을 확인할 수 있다.

메모리 창은 상단 그래프에서 peak 메모리에대한 정보를 보여주고 하단에는 정지시 메모리에 대한 정보를 보여준다. 오른쪽 상단 모서리에 있는 두개의 메뉴를 사용하여 장치(iPhone) 및 사용된 일반 메모리(50th percentile) 또는 사용된 상위 메모리(90th percentile)별로 정보를 필터링하여 영역을 확인할 수 있다. 그래프 막대를 클릭하여 현재 메모리와 이전 메모리 사용량을 비교할 수 있다.

 

 

 

 

출처 : https://developer.apple.com/documentation/metrickit/improving_your_app_s_performance/reducing_your_app_s_memory_use