Кэш-память CoreData в памяти - PullRequest
       5

Кэш-память CoreData в памяти

0 голосов
/ 31 декабря 2011

У меня есть хранилище CoreData, содержащее два типа сущностей - Foo и Bar, поддерживаемые хранилищем SQLite.Можно ожидать, что Foo будет иметь относительно небольшое количество экземпляров (~ 1000), к которым чрезвычайно часто обращаются и просматриваются.С другой стороны, Bar может исчисляться миллионами, и к каждому экземпляру Bar обращаются относительно редко.

У меня такой вопрос, оптимизирует ли CoreData для этого типа асимметричного доступа по умолчанию?Если нет, то есть ли способ заставить coreData всегда кэшировать все экземпляры Foo в памяти?

Ответы [ 2 ]

1 голос
/ 02 января 2012

Вам не нужны два контекста и все возникающие проблемы. Что вы можете сделать, это извлечь все Foo объекты в память с NSFetchRequest, и это даст вам то, что вы хотите.

Убедитесь, что в запросе на выборку includesPropertyValues установлено значение YES (по умолчанию) для извлечения всех данных.

1 голос
/ 31 декабря 2011

Экземпляры будут кэшироваться в памяти только после того, как вы к ним получите доступ.Принудительное использование CoreData для кэширования ВСЕХ ваших Foo экземпляров может быть не очень хорошей идеей, в зависимости от того, сколько памяти в итоге оказывается.CoreData довольно умна в управлении памятью сама по себе.

При этом, возможно, у вас есть 2 отдельных NSManagedObjectContexts, один для Foo, а другой для Bar.Вы можете предварительно извлечь все экземпляры Foo прямо при инициализации этого MOC, и они будут сохраняться MOC, пока вы не вызовете для него reset (что вы, возможно, захотите делать чаще на Bar MOC).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...