0

非常に応答しない(OSX)アプリで実際の問題が発生しています。約 3K (Core Data) オブジェクトを使用すると、起動時と保存時、および新しい管理対象オブジェクトの追加時にアプリがフリーズします。

(Instruments) Time Profiler を使用して呼び出しツリーを掘り下げると、ほとんどの時間が配列コントローラーの並べ替えに費やされているようです。起動中、時間の半分は NSUndoManager に費やされます。NSUndoManager は、アレイ コントローラーがコンテンツを設定している間に通知を監視します...

新しい管理対象オブジェクトがインスタンス化されている間、アレイ コントローラはソートされていますか? ソートを保留にする必要がありますか? NSUndoManager が原因でしょうか?

さらに重要なことは、このようなものを分析するにはどうすればよいのでしょうか? ある種の指数関数的な並べ替えが行われている可能性が非常に高いです。つまり、1 つの配列コントローラーが自分自身を並べ替えると、他のいくつかの配列コントローラーも不必要に再並べ替えを開始する可能性があります。

私が使用しているデータモデルはかなり広範囲です。また、2 つの .xib ファイルに約 30 個のアレイ コントローラーがあり、そのうちのいくつかは同じクラス タイプを管理しています。

Core Data に関するMarcus Zarra の本は、特に Core Data の最適化に関する章で、非常に有益です。

また、 Matt Gallagher によるこの記事は非常に印象的ですが、私が抱えている問題はおそらく最適化が必要なコードとは関係ありません。

どんなヒントでも大歓迎です。私はここで髪を引っ張っています。私を助けることができるチュートリアルや本をいくつか教えてもらえますか? ありがとう。

4

1 に答える 1

0

半分の時間が undoManager にかかっているのに、undo manager を削除してもパフォーマンスの改善が見られない場合は、潜在的なボトルネックとして IO を検討する必要があります。

I/O 操作に費やされた時間を調べます。

また、コア データに関しては、すべての作業をバックグラウンド スレッドで行います。UI をハングさせても意味がありません。複数のコンテキストでの作業が大幅に簡素化されるため、親/子 MOC を使用できることを願っています。

そうでない場合でも、別のスレッドで動作させるために余分な作業を行う価値があります。あなたのUIはあなたに感謝します。

于 2012-06-01T05:01:35.647 に答える