0

アプリケーションのパフォーマンスをテストして、内部に大量のデータがロードされたときにアプリケーションがどのように動作するかを確認しています。私のアプリケーションはコア データ ベースであり、エンティティ モードで配列コントローラーを使用してデータをフェッチします。

私が発見したのは、私のアプリがコア データに存在するすべてのマネージド オブジェクトを取得したため、起動時に配列コントローラーの取得述語を設定したことです。これにより、フェッチされるオブジェクトの数が大幅に減少しました。ただし、問題は、データがいっぱいのときにアプリを起動するのにまだ時間がかかることです。

インストルメント内でアプリを実行しましたが、コア データ フェッチ インストゥルメントは、これが問題ではないことを確認しました (私のアプリは起動時に 20 ~ 30 個のオブジェクトしかフェッチしません)。しかし、Shark で実行すると、起動後 4 ~ 5 秒間、スタックでの唯一の呼び出しはアプリ管理オブジェクト コンテキストに対するものであることがわかります。したがって、すべてのデータを取得しなくても、管理対象オブジェクトのコンテキストと保存されたデータの間の相互作用に関係があると思います。アプリを空にするか、アプリ内にほとんどデータを残さないと、すぐに起動します。

なぜこれが起こるのか誰かが知っていますか?明らかな何かが欠けていますか?いくつかのオブジェクトしかフェッチしないのに、管理対象オブジェクト コンテキストのロードに時間がかかるのはなぜですか? 私はいつも、コア データは適切にスケーリングされ、プログラミング ガイドには 10,000 個のオブジェクトはコア データにはあまり多くないと書かれていると読んでいますが、私のアプリでは大きな違いがあるので、どこが間違っているのか疑問に思っています。

4

1 に答える 1

0

すばらしい!

この質問をしてから数秒後、問題の根本を見つけて解決します。

この問題に直面する可能性のある人々のために:

コア データ マネージド オブジェクト コンテキストを使用してパフォーマンスの問題を解決するには、アプリケーションで使用した各NSArray コントローラーオブジェクト コントローラーで遅延フェッチを使用するを有効にする必要があります。

そしてどうぞ!
あなたがそれをクリックするのと同じくらい速くアプリケーションが始まります!

于 2012-08-16T20:45:18.463 に答える