Core Data アプリケーションのソート速度改善

TwitterクライアントアプリケーションをMac OS向けにCore Dataを使って作っている。

基本的に受信した生データを保存しておいて、表示するときに変換用クラスを使って表示するようにしていた。特に最初は問題がなかった。

しかし、変換クラスが、増えていき、また、表示対象データはツイートであり、タイムラインであるので、時刻順にソートする必要があった。

すると、ソートするときにかなりの頻度でこの変換クラスのメソッドがコールされている様子がデバッグコンソールで見て取れ、設計変更を考えた。

データモデルを変更し、データの格納時に表示用データへの変更を完了させ、そのまま表示できるように変更したけれども、ソートが有効だと意味がなかった。ソートを向こうにすると問題なく表示される。

結局、Interface BuilderでArray Controller(対象データを指しているもの)のオプションの「Auto Rearrange Content」のチェックを外したところ、ソートが有効でも速度的に問題なく画面が表示された。

ちなみに現在、私のタイムラインに存在するツイートは160件程度であり、保存しているデータは、アイコン、名前、時刻、本文、使用ソフト情報だけ、という状況である。

これでCPUをほぼ100%占有し(ターミナルでtopコマンドで確認、CPUがCoreDuoなので100%を超えることもある)画面表示はまったくなく、Dockでアプリアイコンを右クリックすると「応答なし」の状況だった。

これが正しい解決策だったのかはわからないが、とりあえずは改善できた。

コメント