web-dev-qa-db-ja.com

mach_msg_trapが何を待っているかを知る方法は?

私は自分のiPhoneアプリケーションをターゲットでプロファイリングしており、Instrumentsによると、時間の65%がmach_msg_trapに費やされています。

永久に実行されるバックグラウンドスレッドがあり、performSelectorOnMainThread:withObject:waitUntilDone:を使用して約2秒ごとに結果をメインスレッドに送り返します。完了するまで待っていません。

31
PeyloW

私のアプリは実際にはその時間の65%をmach_msg_trap関数に費やしていないことがわかりました。私の側のInstrumentsの設定エラーでした。

サンプラーツールのデフォルトはAll Sample Countsで、これにより、状態に関係なくすべてのスレッドが測定されます。

代わりに、現在の実際のワークロードを反映するRunning Sample Timesに切り替えます。 Instrumentsのスクリーンショットhttp://developer.Apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png

24
PeyloW

メインスレッドがこのバックグラウンドスレッドを待つ(またはユーザー入力を待つ)以外のことをすることを期待していない場合は、心配する必要はありません。アプリケーションはほとんどの場合何もしません。

メインスレッドが他のことを積極的に行っていると予想される場合は、質問を更新してそれを説明してください。この場合、mach_msg_trapへの完全な呼び出しスタックを確認することをお勧めします。これは、実際の時間の浪費がさらに大きい呼び出しスタックの最下部にあることが多いためです。

2
nall