Как оптимизировать mach_msg_trap - PullRequest
3 голосов
/ 30 октября 2011

Я знаю, что этот вопрос задавался ранее, но никто не дал каких-либо полезных ответов о том, как это исправить. У меня есть приложение cocos2d ios, которое использует физический движок box2d. Я провел тест производительности, и процессор тратит 5,6% своего времени на mach_msg_trap. Из того, что я извлек из других вопросов, создается впечатление, что mach_msg_trap - это просто время ожидания основного потока в результате простоя вашего приложения. Мое приложение не бездействует все же. Он имеет шаткую производительность и колеблется в области 50 кадров в секунду. Есть ли способ настроить это, чтобы получить дополнительную производительность? Или это просто результат какого-то плохого кода, который я написал, и если да, то как мне его оптимизировать?


Я тестирую производительность в отладочной сборке на ipod touch второго поколения. Это может быть частью проблемы. Я группирую определенные вещи в спрайте. Но у некоторых спрайтов есть дети, которые не являются ccsprites, поэтому я не могу сгруппировать все в одну партию. Я создаю пул вместо того, чтобы выделять и выпускать их постоянно. Но здесь я получаю шаткое представление. Когда пистолет начинает стрелять, частота кадров падает на 10-15 кадров в секунду. Я пытался отследить, что занимало так много времени, используя инструменты, но две верхние временные задержки - glValidateState, который включает ccsprite draw и ccnode visit. Второй самый короткий временной интервал - mach_msg_trap. Есть ли другой способ узнать, что именно в коде пули замедляет производительность? Кстати, ваша книга была действительно полезна в изучении cocos2d:)

1 Ответ

6 голосов
/ 30 октября 2011

Вы читали ответ на этот вопрос ?

mach_msg_trap не тратит время простоя.Это функция, которая ожидает некоторого результата, прежде чем процесс приложения сможет продолжить нормальное выполнение.Конечно, он также будет работать, когда ваше приложение простаивает, но я сомневаюсь, что это так.Вместо этого эти 5% могут возникнуть из-за ожидания дискового ввода-вывода, например, при загрузке файла из флэш-памяти.

Если ваша производительность «шаткая», я бы не стал тратить время на поиск неисправности на уровне системы.функции, которые вы не можете изменять или настраивать.

Во-вторых, вы не упомянули, где вы измеряете производительность, то есть какое устройство.Если вы получаете 50 кадров в секунду на iPhone 3G или старше, производительность можно даже считать хорошей.Кроме того, вы должны измерять производительность только в выпусках сборки.

Лично я могу только рекомендовать проверить, что вы следовали передовым методам, таким как использование листов спрайтов и атласа текстуры для ваших спрайтов, объединение спрайтов и физических объектов вместочастого их создания и освобождения, а также сокращения количества итераций, выполняемых Box2D в своей функции шага.

...