2009-09-28 11 views
27

私はターゲット上で私のiPhoneアプリケーションをプロファイリングし、Instrumentsの65%の時間は​​で費やされています。mach_msg_trapが待っているものを見つける方法?

私は永遠に、実行され、2秒ごとaproximately、performSelectorOnMainThread:withObject:waitUntilDone:を使用して、メインスレッドに戻って結果を送信するバックグラウンドスレッドを持っています。私は完了するまで待っていません。

答えて

24
私のアプリが実際にそれの65%を費やしていないこと​​関数内の時間だアウト回し

。インストゥルメントの設定エラーです。

サンプラーツールのデフォルトはです。すべてのサンプル数、これは状態に関係なくすべてのスレッドを測定します。

代わりにに切り替えて、現在の実際の作業負荷を反映するサンプル時間を実行してください。 Screenshot of Instruments http://developer.apple.com/library/mac/qa/qa2009/images/qa1619_running_sample_times.png

+1

ソース:http://developer.apple.com/mac/library/qa/qa2009/qa1619.html – Nickolay

+2

すべてのリンクがここで壊れています – grane2212

2

あなたのメインスレッドは、このバックグラウンドスレッドで待機している(またはユーザー入力を待っている)を心配することは何もありません以外の何かをやっていることを期待していない場合 - あなたのアプリケーションは、単純にほとんどの時間を何の関係もありません。

メインスレッドが積極的に何か他のことをしていると思われる場合は、質問を更新してそれを記述してください。この場合は、実際のタイムシェアがさらに上がっているコールスタックの一番下にあるので、mach_msg_trapへの完全なコールスタックを調べることをお勧めします。

+0

私は私のメインスレッドが更新を受信し、2秒に1回画面を再描画以外多くを行うことを期待しないでください。私はしかし、私のバックグラウンドスレッドがすべての最後のクロックサイクルを残すことを期待しています。 – PeyloW

+0

私はまだ、mach_msg_trap上の呼び出しスタックをチェックするだけで、メインスレッドがアイドリングしているという仮定を二重にチェックする価値があると思います。 – nall

関連する問題