我在目标上分析我的 iPhone 应用程序,根据 Instruments 65% 的时间花在mach_msg_trap
.
performSelectorOnMainThread:withObject:waitUntilDone:
我有一个永远运行的后台线程,并使用大约每 2 秒将结果发送回主线程。我不会等到完成。
我在目标上分析我的 iPhone 应用程序,根据 Instruments 65% 的时间花在mach_msg_trap
.
performSelectorOnMainThread:withObject:waitUntilDone:
我有一个永远运行的后台线程,并使用大约每 2 秒将结果发送回主线程。我不会等到完成。
结果我的应用程序实际上并没有在mach_msg_trap
函数中花费 65% 的时间。就我而言,这是 Instruments 中的配置错误。
Sampler 工具默认为All Sample Counts,这将测量所有线程,而不管它们的状态如何。
而是切换到反映当前实际工作负载的 运行采样时间。仪器截图 http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png
如果您不希望您的主线程在等待此后台线程(或等待用户输入)之外做任何事情,那么没有什么可担心的——您的应用程序大部分时间都无事可做。
如果您期望主线程正在积极做其他事情,请更新您的问题以描述它。在这种情况下,您可能需要查看对 mach_msg_trap 的完整调用堆栈,因为它通常位于调用堆栈的底部,实际浪费时间的地方更多。