10

저는 많은 양의 데이터를 매우 자주 (분당 15 회) 처리하는 앱을 개발하고 있습니다. 이를 위해 많은 양의 메모리를 할당 한 다음 각 데이터 배치별로 데이터를 해제했습니다.Spiky 메모리가 앱에 "건강"합니까?

여기 인스트루먼트 내 메모리 할당의 화면입니다 : The memory

메모리 사용량이 꽤 빨리 30메가바이트에 대해에 3메가바이트 약에서 진동한다. 나는 아이폰에 대해 "건강"하다고 생각하고있다.

너무 많은 메모리를 할당하고 해제하는 것이 위험할까요? 그것은 지속 불가능한 것입니까, 아니면 나쁜 습관입니까?

감사합니다.

+0

관심의 대상에서, 어떤 종류의 처리가 스파이크를 일으키고 있습니까? 이미지 처리입니까? –

+0

예, 실제로 이미지 분석, 어떻게 알았습니까? – pop850

답변

7

위험 할뿐만 아니라 나쁜 습관도 아닙니다. 메모리를 할당하고 해제하는 데는 시간이 걸리므로 매우 자주 수행하는 대신 한 번 수행하고 할당 된 메모리를 다시 사용하는 것은 메모리 사용 효율 (매 순간 가장 적은 메모리 사용)과 성능 사이의 균형입니다.

현재 앱의 성능이 저하되지 않는 경우 앱에 대한이 절충안을 올바르게 선택했을 것입니다.

일반적으로 30MB 메모리를 사용하는 것은 구형 장치 (iPhone 3G 및 이전 버전)의 경우 상당히 많은 양입니다. 앱에 사용 가능한 메모리가 많아서 메모리 경고를받을 준비가되어 있는지 확인할 수 없습니다. 메모리 경고를 받으면 앱이 메모리 사용량을 줄일 수없는 경우 OS가이를 경고합니다.

+0

제 경험상, 20-25MB를 초과하는 항목은 iPhone 3G에서 앱이 삭제 될 것입니다. pop850이라면 이전 장치에서이를 테스트해야합니다 (지원하는 데 관심이있는 경우). 즉, 첫 번째 스파이크로 앱이 죽지 않는다면 반복해서 사용하면 아마 그 앱을 죽이지 않을 것입니다. 누수가없는 한. –

+0

청중을 더 새로운 장치로 제한하고 싶지 않기 때문에 청크로 처리해야하므로 메모리를 덜 사용한다고 생각합니다. 그러나, 그것은 내 아이폰 4에 충돌하지 않고 이전에 180MB 이상을 할당했기 때문에 다소 괴롭다. 대답을 많이 주셔서 감사합니다. – pop850

-1

사용자가 iPhone 4 또는 iPhone 3GS를 가지고 있다면 가능해야하지만 iPhone 3G에서 메모리 경고가 매우 빠르게 발생합니다. iPhone 4는 256MB의 RAM (총 512MB)을 가지고 있습니다. iPhone 3GS는 128MB의 응용 프로그램과 총 256 개를 가지고 있습니다. 아이폰 3G는 128MB와 64MB의 응용 프로그램을 가지고 있습니다. 앱이 실행 중입니다.

사과는 우리가 할 동안 오토 릴리즈가 할당되는 우리에게 객체를 제공하기 때문에 당신은, 당신이 정말로 필요로하는 메모리를 할당하고, 너무 많이 오토 릴리즈 사용하지 않는 시도해야 말했듯이 정말

경우] 더 이상 필요 성능이 그렇게 나쁘지는 않습니다. 실제로 메모리를 필요로 할 때 더 적은 메모리를 사용하고 더 많은 메모리를 할당하려고합니다.

+0

실제로 autorelease 객체와 함께 자동 릴리즈 풀을 사용하고 필요할 때마다 사용해야합니다. – koo

+0

@ Adam Ko 그러나 릴리스를 사용해야합니다. 대부분의 경우 카운트를 직접 보유 할 수 있으므로 직접 풀을 만들 필요가 없습니다. 당신이 API를 통해 얻을 autoreleased 많은 객체를 사용하는 루프에서 osmething하고 있지 않다면 –

+0

그래, 당신이 무슨 뜻인지 모르겠다. 질문에 설명 된대로 메모리 경고를 일으키지 않습니다. 엄청난 양의 메모리를 할당하지 않는 한 말입니다.또한, 얼마나 많은 메모리를 사용할 수 있는지에 대한 꽤 큰 일반화를하고 있습니다. 'iPhone 4의 앱은 256MB (총 512MB)입니다.'라고 말하는 것은 잘못되었습니다. 하드웨어에서 작동하는 방식이 아닙니다. – lxt

4

이러한 상황에서 가장 걱정되는 것은 조각화입니다. 덩어리가 모두 같은 크기라면 그래도 괜찮을 것입니다 (그리고 그래프를 보면 최고점이 완전히 평평한 것처럼 보입니다).

당신은 할당 비용을 지불 할 것이지만 Ole의 말처럼, 앱이 이미 충분히 좋은 실적을 보이고 있다면 최적화를 시도하는 데 별다른 의미가 없습니다.

관련 문제