초당 88 번씩 자체 스레드에서 실행해야하는 메서드가 있습니다 (오디오 장치의 콜백입니다.) 호출 할 때마다 NSAutoreleasePool을 생성하지 않아야합니까?NSAutoreleasePool을 만드는 것이 얼마나 비쌉니까?
답변
피할 수 있으면 그렇게하십시오. 당신이 할 수 없다면, 그것에 대해 걱정할 필요가 없습니다, 자동 풀 풀이 생성되고 아주 빨리 릴리즈됩니다. 정확한 답변이 필요한 경우 간단한 테스트와 측정을 설정하십시오 (실적에 대해 말할 때 항상 좋은 아이디어입니다).
오늘 실험이 성능 zoul에 대해 배우는 가장 좋은 방법이라는 두 번째 알림을 보내 주셔서 감사합니다. – morgancodes
NSAutoReleasePool 자체를 생성하는 것이 너무 느려서는 안되지만, 풀을 배수 할 때 dealloc으로 처리 할 객체가 많은 경우 느리게 시작될 수 있습니다. 풀 풀이 걸리는 시간을 프로파일 링 할 가치가 있습니다.
마이크 애쉬의 Performance Comparisons of Common Operations을 참조하십시오. 그가 10.5에서 테스트했을 때 autorelease 풀을 만들고 파괴하는 데 0.0003577 밀리 초가 걸렸습니다.
관련성 높은 iPhone 벤치 마크 (관련 질문에 태그 추가) : http://www.mikeash.com/pyblog/performance -comparisons-of-common-operations-iphone-edition.html 같은 작업에는 0.0173ms가 소요됩니다. 어떤 경우이든 성능 균형을 맞추기위한 실험적 테스트가 일반적으로 필요합니다. –
자신의 오토 릴리즈 풀을 생성
... 그냥 수영장이 정말 응용 프로그램의 성능 우려 autorelease를 구체적인 증거를 계기 또는 상어에서 돌아 왔어요 가정 딜레마에 대한 답변입니다. 한 번에 너무 많이 생성하지 말고 페이징 지옥 (Mac)을 입력하거나 메모리 경고 및/또는 종료 (iPhone OS)를 받으려면 많은 객체를 만들 때 작업하십시오.
그러나 autorelease 풀은 객체이기도합니다. 그들은 자유롭지 않다. 하나의 자동 풀 풀의 비용은 매우 적지 만, 많은 객체를 생성하는 루프에서 X 객체마다 하나의 풀을 생성하고, 은 배수 처리하고 다음 X 객체는 다른 풀을 생성합니다.
그럼에도 불구하고 자동 복구 풀은 그다지 많지 않으므로 많이 추가되지는 않습니다. 인스 트루먼 트 또는 상어의 프로필에서 이것을보아야합니다 : 대부분 -[NSAutoreleasePool drain]
에서 보낸 시간은 -[NSObject release]
입니다. 이제 autorelease 풀을 사용하든 사용하지 않든간에 지출 할 시간입니다.
[편집 : 2011 년 12 월 현재 @autoreleasepool
문과 함께 개체가없는 자동 풀 풀을 만들 수 있습니다. 그들은 아마도 여전히 무료는 아닙니다 (최소한 ARC가없는 경우), 지금은 이전보다 훨씬 저렴합니다.]
그래서 이러한 경우의 진정한 해결책은 단순히 적은 수의 개체를 만드는 것입니다. 이 의미 :
- 을 가능한 한 reallocating 이전에 사용 된 버퍼 크기 때 필요한 변경을 이용하여 버퍼의 재사용. 다시 할당해야 할 가능성을 줄이기 위해 the
malloc_good_size
function을 사용하여 크기를 조정할 수 있습니다. 이전에 필요한 크기와 필요한 새 크기가 둘 다 같은 수로 반올림되면 다시 할당하지 않아도됩니다. 버퍼를 늘리지 않고 축소하는 것만을 고려할 수도 있습니다. - 변경 가능한 개체 사용 및 재사용. 예를 들어, 문자열을 작성한 다음 문서에 쓰거나 새 문자열을 작성하는 대신 전체 내용을 삭제하거나 "old"전체 내용을 "new"문자열의 첫 번째 부분으로 바꾸십시오.
- X (풀 처리 임계 값)의 값 조정. X가 클수록 순간 메모리가 더 많이 소모되지만 더 적은 수의 풀이 만들어져 폐기됩니다. 더 낮은 X는 더 많은 풀을 의미하지만 페이징 또는 메모리 경고를받을 위험이 적습니다. X를 너무 멀리 올리거나 너무 높게 설정하는 경우를 제외하고는 다른 점이별로 없습니다.
피터에게 감사드립니다. 내 경우에는 성능이 떨어졌습니다. [NSAutoreleasePool drain]은 무시할 수없는 것으로 밝혀졌습니다. 그러나 이것은 나중에 참조할만한 좋은 정보입니다. – morgancodes
- 1. 새로운 UIWebView를 만드는 것이 얼마나 비쌉니까?
- 2. 장고에 미들웨어를 넣는 것이 얼마나 비쌉니까
- 3. ItemControl에 요소를 추가하는 것이 얼마나 비쌉니까?
- 4. 닷넷의 도트는 얼마나 비쌉니까?
- 5. CreateThread()는 얼마나 비쌉니까?
- 6. UITableView의 reloadData는 얼마나 비쌉니까?
- 7. JavaScript의 변수는 얼마나 비쌉니까?
- 8. Java Locking은 얼마나 비쌉니까?
- 9. 함수 호출은 얼마나 비쌉니까?
- 10. 동기화가 얼마나 비쌉니까?
- 11. 스레드는 얼마나 비쌉니까?
- 12. JavaScript에서 함수 호출이 얼마나 비쌉니까?
- 13. SQL ORDER BY는 얼마나 비쌉니까?
- 14. Berkeley DB 사용량은 얼마나 비쌉니까?
- 15. 코어 데이터에서 페치 요청을 수행하는 것이 얼마나 비쌉니까?
- 16. windows API : API 함수를 호출하는 것이 얼마나 비쌉니까?
- 17. int에서 Java로 short 형으로 변환하는 것이 얼마나 비쌉니까?
- 18. ASP.NET 응용 프로그램 변수를 여러 번 호출하는 것이 얼마나 비쌉니까?
- 19. GUID 캐스팅과 비교가 얼마나 비쌉니까?
- 20. Oracle Enterprise Manager는 얼마나 비쌉니까?
- 21. Java에서 새 스레드를 만드는 것이 얼마나 비쌉니까? 스레드 풀 사용은 언제 고려해야합니까?
- 22. CakePHP에서 find ('count')가 얼마나 비쌉니까?
- 23. 이메일 클라이언트를 만드는 것이 얼마나 힘듭니다? - 파이썬
- 24. 자바의 문자열 인코딩 변환은 얼마나 비쌉니까?
- 25. RESTful API 용 SSL은 얼마나 비쌉니까?
- 26. 소멸자/파이널 라이저를 사용하는 것이 비쌉니까?
- 27. 성능 편집증 : Float.parseFloat (String), Integer.parseInt (String)은 얼마나 비쌉니까?
- 28. 세로 편집기를 만드는 것이 얼마나 어렵고 시간이 오래 걸리나요?
- 29. App Purchase에서 구현하는 것이 얼마나 힘듭니다?
- 30. Drush를 사용하는 것이 얼마나 안전합니까?
이제 막 상어에서 돌아 왔습니다. [NSAutoReleasPool release]가 내 CPU의 0.2 %를 사용하고 있습니다. 나는 그것을 가질 여유가있다, 나는 그것을 거기에두고 갈 것이다. – morgancodes