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 に答える