2016-03-25 36 views
5

Postaram się, aby to pytanie było na razie ogólne i uniknąć zaśmiecania tego kodem.Core Data Overcessive VM: Pamięć podręczna stron SQLite

Mam aplikację na iOS, która używa danych podstawowych (sqlite) dla swojego magazynu danych. Model jest dość złożony, z dużą hierarchią obiektów. Podczas pobierania i importowania tych dużych zestawów danych zauważam, że aplikacja wyłącza się po pewnym czasie z powodu ostrzeżenia o pamięci.

Profiler alokacji pokazuje mi nadmierne "przejściowe" obiekty strony VM: SQLite. Rozmiar tego stale rośnie i rośnie, ale nigdy nie spada. Próbowałem upewnić się, że wszystkie moje zapisy NSManagedObjectContext występują wewnątrz wywołań performBlock.

Wydaje mi się, że istnieją konteksty obiektowe, które nie są zwalniane i/lub resetowane.

Próbowałem wyłączyć UndoManager w NSManagedObjectContext. ustawiając stichyInterval na bardzo niską wartość (1.0) i wywołując reset na moich MOC-ach po zakończeniu zapisywania danych podczas importu.

Co to oznacza, gdy pamięć podręczna stron przejściowych VM SQLite nadal rośnie tak wysoko? Co należy zrobić, aby obniżyć pamięć podręczną strony?
Jaki jest dopuszczalny rozmiar tej pamięci podręcznej, aby uzyskać dostęp do dużej aplikacji Core Data?

Dzięki,

+0

Udało ci się znaleźć jakieś rozwiązanie? Mam dokładnie ten sam problem .. –

+0

Właśnie odpowiedział na pytanie poniżej. – dmclean

Odpowiedz

0

Cóż okazuje się przemijające VM SQLite strona cache kolumna pokaz instrumentami kumuluje się do sesji, a nie „prąd” wartość. Oczywiście, że nigdy nie schodzi na dół!

Okazuje się, że niektóre inne optymalizacje wokół zapewnienia, że ​​zarządzane obiekty są usuwane, naprawiło problem z pamięcią CoreData.

wielki artykuł na ten temat tutaj: Core Data issues with memory allocation