2012-10-21 4 views
5

InstrumentsのTime Profilerを使用して特定の操作を強化する方法に関するアドバイスを探しています。私は要求に応じてその内容を読み込むページングスクロールビューを持っています。新しいページがスクロールされると、別のページが2ページ右に読み込まれます。これは、現在のページが画面の50%でスクロールされ、遅いデバイスではスクロールのスムーズさを妨げるようなボトルネックで十分です。スクロールは50%のパイントで非常に短時間停止した後、元の動作に戻ります。Instrumentsを使用したベンチマークパフォーマンス

アプリケーションにネットワークコンポーネントがないことに注意してください。ボトルネックは、データが取得されている間ではありません。すべてが新しいビューの読み込み中です。

私はこれを改善するために作業を進めていますので、私は自分の拡張の効果を評価できるように移行のベンチマークを行う必要があります。 WWDCセッションを見て、私はタイムプロファイラの基本を理解していますが、私は正しいことを見ているとは確信していません。

私は装置を稼働させてから、スクロールを実行しています。私は、CPU活動の予想されるスパイクを見ます。私はスパイクを選択し、シンボル名を見ています。以下に示すように、システムライブラリを隠してObj-Cを表示すると、81.0 msの実行時間で90%のスパイクを処理しています。

enter image description here

私は自分のコードにドリルダウンしたときに私の混乱が来ます。私は最大貢献者の1人(23ミリ秒)がちょうどsortedArrayUsingDescriptorsを使用する小さなルーチンであることがわかります。私はあまりそれについて行うことはできません。 CGRectInsetを使用している根本的な原因は、数ミリ秒もかかる場合もあります。私は画像の使用やそのようなものにもっと関連することを期待していたと思います。

私は正しいものをベンチマークしているかどうかはわかりません。私は本当に6msの操作を5msまで減らして差を見たいと思っていましたか?私の問題を診断するのに適したツールを見ていますか?

何を測定するのか、私の努力をどこに集中させるべきかについてのヒントや指示は、本当に価値があります。

+0

配列のソートに時間がかかる場合は、それがあなたの努力に集中する必要があります。なぜあなたは配列をソートしていますか?事前にソートすることはできますか?それは配列でなければならないのですか? – jrturton

+1

あなたの楽器が使用する限り、あなたが正しいことをしているように見えます。そのメソッドとcellForRowAtIndexPathは、ほとんどの時間がかかるところにあるようです。ダブルクリックすると、ソースコードの実際のホットスポットが表示されます。 – jrturton

+0

ありがとうございます。私は、一連の項目を持つコアデータクラスを持っています。便宜上、そのクラスにorderedItemsメソッドを追加しました。たとえば、セルのテキストが必要な場合は、orderedItemsを使用して正しい項目を探します。たぶん私はクラスにこれをキャッシングし、項目が変更されたときに何とかそれを更新することによって、数ミリ秒を削ることができます。 –

答えて

1

グランドセントラルディスパッチを使用して、バックグラウンドスレッドでできるだけ多くの非UI作業(フェッチ、ソート、選択など)を行うことを検討してください。これは、マルチCPUマシンのパワーを活用し、メインスレッドをより速く動かすことができます。必要に応じてメインスレッドのみを使用して作業します。

関連する問題