如何找出mach_msg_trap等待的内容?

时间:2009-09-28 18:29:35

标签: objective-c cocoa-touch performance instruments

我在目标上分析我的iPhone应用程序,根据Instruments,65%的时间用于mach_msg_trap

我有一个永远运行的后台线程,并使用performSelectorOnMainThread:withObject:waitUntilDone:将结果发送回主线程,大约每2秒一次。我不等到完成。

2 个答案:

答案 0 :(得分:24)

结果我的应用实际上并没有在mach_msg_trap功能中花费65%的时间。对我而言,这是仪器中的配置错误。

Sampler工具默认为 All Sample Counts ,这将测量所有线程,无论其状态如何。

而是切换到运行采样时间,它将反映当前的实际工作负载。 Screenshot of Instruments http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png

答案 1 :(得分:2)

如果你不希望你的主线程做其他事情而不是等待这个后台线程(或等待用户输入)那么就没什么可担心的了 - 你的应用程序大部分时间都没什么可做的。

如果您希望主线程积极做其他事情,请更新您的问题来描述。在这种情况下,您可能希望查看完整的调用堆栈到mach_msg_trap,因为它通常位于调用堆栈的底部,实际的时间浪费更高。