나는 오디오 버퍼 레벨에서 일하고 있는데, 오브젝트의 콜렉션에 의해 생성 된 오디오 신호를 믹싱한다. 44.1khz에서 이러한 객체를 반복하므로 효율이 중요합니다. NSArray와 C 배열의 포인터를 반복 할 때 효율성의 차이가 있습니까? NSMutableArray는 어떻습니까?반복의 효율성 : NSArray 대 포인터의 C 배열?
답변
NSArray와 C 배열의 포인터에서 반복 처리의 효율성에 차이가 있습니까?
예. 직접 C 배열을 반복하면 더 빠를 것입니다.
대부분의 앱은이 점에 대해 걱정할 필요가 없으며 성능 향상을 위해 다른 곳을 봐야합니다. 하지만 앱에서이 함수가 초당 44,100 번 실행되면, 마이크로 최적화해야합니다 (가능한 한 적게 수행해야합니다. 즉, 절대적으로 수행해야하는 작업 만 44,100 번 수행해야합니다. 초당 횟수).
NSMutableArray는 어떻습니까?
대. NSArray? 당신이 의지 할 수 있거나 걱정해야 할 차이점이 없습니다.
NSFastEnumeration 프로토콜은 -countByEnumeratingWithState : objects : count :를 정의합니다. NSArrays, NSMutableArrays 및 이에 준하는 다른 모든 컬렉션 객체의 반복을 위해 C 배열을 사용하여 -objectAtIndex : 각 반복을 피할 수 있습니다. 성능 분석을 사용하여 어느 솔루션이 가장 빠른 솔루션인지 파악하십시오.
사실, 그렇지 않습니다. 빠른 열거는 컬렉션 클래스가 내부적으로 반복을 관리하도록하는 방법이지만 C 배열과 비슷한 방식으로 원격으로는 아무 것도 없습니다. – bbum
프로토콜은 countByEnumeratingWithState : objects : count : 설명과 함께 선언합니다. "보낸 사람이 반복해야하는 개체의 C 배열을 참조로 반환하고 반환 값으로 배열의 개체 수를 참조로 반환합니다." –
오른쪽 -하지만 그것은 똑 바른 C 배열을 열거하는 것과 같은 것도 아니며 컬렉션 클래스의 * 내부 구조 *가 C 배열임을 의미하지도 않습니다. 참조를 복사하고 빠른 열거 메타 데이터를 관리하는 비용을 지불 할 것입니다. -objectEnumerator만큼 중요하지는 않지만, 특히 오디오 처리의 경우에는 여전히 오래된 C 배열보다 느립니다. – bbum
- 1. NSArray 대 배열
- 2. 포인터의 C++ 배열
- 3. 개체 포인터의 배열 만들기 C++
- 4. 트리 : 연결된 목록 대 배열 (효율성)
- 5. 포인터의 포인터로의 C++ 벡터
- 6. 역 직렬화 대 XmlReader의 효율성
- 7. SQL CASE 대 JOIN 효율성
- 8. 코드 대 DB의 트랜잭션 효율성
- 9. C# 배열 [a, b, c] 대 배열 [a] [b] [c]?
- 10. C# - 배열 인덱스 대 LINQ?
- 11. 2D 배열 - C 대 Java
- 12. 포인터의 Objective-C 사용
- 13. 가상 포인터의 크기 -C++
- 14. C++ 포인터의 차이 ->
- 15. C 포인터의 문제점
- 16. 목록 데이터 구조 C# 효율성
- 17. C 타입의 NSArray?
- 18. Objective-C NSArray
- 19. Linq 효율성 질문 - foreach 대 집계
- 20. Allegro 대 OpenGL 속도/효율성 현명한
- 21. 웹 프록시 스크립트 대 HTTP 프록시의 효율성?
- 22. 수동으로 작성한 루프 대 연산자 오버로드의 효율성
- 23. 세 포인터의 배열에 대한 C# 래퍼
- 24. 배열 대 비트 마스크
- 25. 배열 대 C 언어의 로컬 변수
- 26. char [] 또는 substring() : C#의 효율성?
- 27. 효율성
- 28. C++의 포인터 대 벡터 삭제하기
- 29. objective-c 빈 NSArray 오류
- 30. reorder NSArray in objective-c
물론 오디오 프로그램을 사용하고 가능한 한 반복하지 않으려면 코드를 벡터화하지 않으면 다른 성능 문제가 발생할 수 있습니다. – bbum
http://www.savoysoftware.com/blog/my-iphone-is-not-a-mac-pro/C/C++를 사용하여 Cocoa를 최적화하는 방법에 대해 자세히 설명합니다 ... 그의 경우 NSArray/CGRectContainsPoint()에서 전환하는 것이 ~ 4 배 향상되었지만 알고리즘을 변경하는 것은 ~ 200x 이득. –
흥미 롭습니다. 고마워요. – morgancodes