Подтвердить что ты не робот

Как узнать, что ждет mach_msg_trap?

Я профилирую приложение iPhone на цель, и согласно Инструментам 65% времени тратится на mach_msg_trap.

У меня есть фоновый поток, который запускается навсегда и отправляет результаты обратно в основной поток, используя performSelectorOnMainThread:withObject:waitUntilDone:, приблизительно каждые 2 секунды. Я не жду, пока закончится.

4b9b3361

Ответ 1

Оказалось, что мое приложение фактически не тратит 65% времени в функции mach_msg_trap. Это была ошибка конфигурации в Инструментах с моей стороны.

Инструмент Sampler по умолчанию имеет значение All Sample Counts, это будет измерять все потоки независимо от их состояния.

Вместо этого перейдите к Running Sample Times, который будет отражать текущую рабочую нагрузку. Снимок экрана с инструментами http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png

Ответ 2

Если вы не ожидаете, что ваш основной поток будет делать что-либо другое, кроме ожидания в этом фоновом потоке (или ожидании ввода пользователя), вам нечего беспокоиться - ваше приложение просто не имеет ничего общего с временем.

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