2011-12-31 8 views
0

私はCoreiteストアに2種類のエンティティ - FooBarをSQLiteストアでバックアップしています。 Fooは、比較的少数のインスタンス(〜1000)を持つことが予想され、すべてが非常に頻繁にアクセスされ、横断されます。一方、Barは数百万に入ることがあり、Barの各インスタンスには比較的頻繁にアクセスされません。メモリにキャッシュCoreDataストア

私の質問は、CoreDataはこのタイプの非対称アクセスに対してデフォルトで既に最適化していますか?そうでない場合は、coreDataにメモリ内のFooのすべてのインスタンスを常にキャッシュするように指示する方法はありますか?

答えて

1

あなたは2つのコンテキストと結果として生じるすべてのトラブルを必要としません。あなたができることは、NSFetchRequestですべてのFooオブジェクトをメモリにフェッチすることです。それはあなたに必要なものを与えます。

フェッチ要求が引っ張らすべてのデータを持っているYESincludesPropertyValuesセット(デフォルト)を持っていることを確認します。

+0

元の質問は、彼がバーのインスタンスの数百万を持っていたと述べました。 2つの別個のMOCを有することにより、彼等は定期的に「バー」MOCをリセットすることができるので、これらのオブジェクトは何らの理由でもメモリを占有しない。 ** **もう少し仕事ですが、確かに行く方法です。 – samvermette

+0

それは本当です。しかし、店舗間の関係は本当に管理が難しいです。 –

+0

彼は関連している2つのエンティティに関する何も言及していません。いずれにしても、私は店舗ではなく、オブジェクト**のコンテキスト**を2つ持っていました。オブジェクトIDを使用してMOC間でオブジェクトを渡す必要がありますが、複数のストアを持つほど悪くはありません。 – samvermette

1

インスタンスは、アクセスするとメモリにキャッシュされます。 CoreDataにすべてのFooインスタンスをキャッシュさせることは、どれだけのメモリが存在するかによってはあまり良い考えではないかもしれません。 CoreDataはメモリを単独で管理するのにはかなりスマートです。

あなたができることは2つの別々のNSManagedObjectContextsを持っていて、FooのためのものとBarのものです。そのMOCを初期化するときにFooインスタンスをすべてプリフェッチすることができ、reset(これはBar MOCでより頻繁にやりたいことがあります)を呼び出すまで、MOCによって保持されます。

関連する問題