32

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

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

4

2 回答 2

25

结果我的应用程序实际上并没有在mach_msg_trap函数中花费 65% 的时间。就我而言,这是 Instruments 中的配置错误。

Sampler 工具默认为All Sample Counts,这将测量所有线程,而不管它们的状态如何。

而是切换到反映当前实际工作负载的 运行采样时间。仪器截图 http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png

于 2009-09-30T16:26:42.800 回答
2

如果您不希望您的主线程在等待此后台线程(或等待用户输入)之外做任何事情,那么没有什么可担心的——您的应用程序大部分时间都无事可做。

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

于 2009-09-28T18:54:58.110 回答