2011-10-30 5 views
3

이 질문은 이전에 묻지 만 아무도 해결 방법에 관해 도움이되는 대답을 제공하지 못했습니다. box2d 물리 엔진을 사용하는 cocos2d ios 응용 프로그램이 있습니다. 나는 그것에 성능 테스트를 달리고 cpu는 mach_msg_trap에 그것의 시간의 5.6 %를 소요한다. 내가 다른 질문에서 수집 한 것에서 마치 mach_msg_trap이 응용 프로그램이 유휴 상태가되어 메인 쓰레드가 허리를 굽히는 것처럼 보입니다. 내 응용 프로그램은 비록 유휴 상태가 아닙니다. 흔들리는 성능과 50fps 영역에서 움직입니다. 추가 성능을 얻으려면이 방법을 구성하는 방법이 있습니까? 또는 내가 작성한 나쁜 코드의 결과 일 뿐이므로 어떻게 최적화합니까?mach_msg_trap을 최적화하는 방법


아이팟 터치 2 세대에서 디버그 빌드의 성능을 테스트하고 있습니다. 이것은 문제의 일부일 수 있습니다. 스프라이트 배치로 특정 항목을 그룹화합니다. 하지만 일부 스프라이트에는 ccsprites가 아닌 자식이 있으므로 모든 것을 하나의 배치로 그룹화 할 수 없습니다. 나는 그 (것)들을 할당하고 풀어 놓기 대신에 총알의 수영장을 창조한다. 그러나 이것이 내가 흔들리는 성능을 얻는 곳입니다. 총이 발사되기 시작하면 프레임 속도는 10-15fps로 떨어집니다. 나는 오랫동안 악기를 사용하여 무엇을 찍었는지 추적하려고 시도했지만, 상위 두 시간의 waisters는 glValidateState이며 ccsprite draw와 ccnode 방문을 포함합니다. 두 번째 시간 waister는 mach_msg_trap입니다. 성능을 떨어 뜨리는 총알 코드에 무엇이 있는지 알아내는 다른 방법이 있습니까? 그런데 당신의 책은 cocos2d를 배우는 데 정말로 도움이되었습니다 :)

+0

예, 샘플 시각을 샘플 시간으로 바꿨습니다. –

답변

6

this question에 대한 답변을 읽어 보았습니까?

mach_msg_trap은 유휴 상태의 시간을 낭비하지 않습니다. 응용 프로그램의 프로세스가 정상적으로 실행되기 전에 어떤 결과가 나올 때까지 대기하는 함수입니다. 물론 앱이 유휴 상태 일 때도 실행되지만, 이것이 사실 일지는 의심 스럽습니다. 대신 5 %는 플래시 메모리에서 파일을로드 할 때 예를 들어 디스크 I/O를 기다리지 않아도됩니다.

성능이 "불안정한"경우 수정하거나 구성 할 수없는 시스템 수준의 기능에서 오류를 찾으려고 시간을 낭비하지 않아도됩니다.

두 번째로 성능 측정 위치, 즉 어떤 장치를 언급하지 않았습니다. iPhone 3G 또는 그 이상에서 50fps를 얻는다면 그 성능은 좋다고 간주 될 수도 있습니다. 또한 릴리스 빌드에서만 성능을 측정해야합니다.

개인적으로 스프라이트 시트와 텍스처 아트라스를 스프라이트에 사용하고, 스프라이트와 물리 객체를 자주 생성하고 해제하는 대신 풀링하고 반복 횟수를 줄이는 것과 같은 모범 사례를 따랐는지 만 확인하는 것이 좋습니다. Box2D는 단계 기능으로 실행 중입니다.