2016-03-25 3 views
5

Je vais garder cette question générale pour l'instant et éviter de l'encombrer avec du code.Données de base Excessive VM: cache de page SQLite

J'ai une application iOS qui utilise des données de base (sqlite) pour son magasin de données. Le modèle est assez complexe, avec une grande hiérarchie d'objets. Lorsque je récupère et importe ces grands ensembles de données, je remarque que l'application s'arrête après un certain temps en raison d'un avertissement de mémoire.

Le profileur d'allocations me montre des objets de page VM «transitoires» excessifs: SQLite. La taille de celui-ci ne cesse de croître et de plus en plus, mais ne baisse jamais. J'ai essayé de m'assurer que toutes mes sauvegardes NSManagedObjectContext se produisent dans les appels performBlock. Il me semble qu'il y a des contextes d'objets qui ne sont pas désalloués et/ou remis à zéro. J'ai essayé de désactiver undoManager dans NSManagedObjectContext. mettre le stalenessInterval à une valeur très basse (1.0), et appeler la réinitialisation sur mes MOC après avoir sauvegardé les données lors de l'importation. Qu'est-ce que cela signifie lorsque le cache des pages transitoires VM SQLite continue de monter si haut? Qu'est-ce qui doit être fait pour que le cache de page s'effondre?
Quelle est la taille acceptable pour ce cache dans une grande application de base de données?

Merci,

+0

Avez-vous pu trouver une solution? Je suis confronté exactement le même problème .. –

+0

Juste répondu à la question ci-dessous. – dmclean

Répondre

0

Eh bien, il tourne le spectacle de la colonne de cache de page transitoire VM SQLite Instruments est cumulative à la session, pas la valeur "actuelle". Eh bien, bien sûr, il ne descend jamais!

Il s'avère que certaines autres optimisations concernant la suppression des contextes d'objets gérés ont été résolues, ce qui a permis de résoudre le problème de mémoire CoreData.

Grand article ici sur le sujet: Core Data issues with memory allocation