2011-03-08 3 views
2

J'utilise sqlite dans mon application via le wrapper FMDB.fuite de mémoire (?) Après sqlite + commande de vide fmdb

utilisation de la mémoire dans mon application se trouve à 2,25 Mo avant un appel à vide:

[myFmdb executeUpdate: @"VACUUM;" ]; 

Afterwords son à 5,8 Mo, et je ne peux pas sembler récupérer la mémoire. Après le vide, l'outil Instruments/Allocations affiche des tonnes d'appels sqlite3MemMalloc avec des octets actifs, allouant chacun 1,5 K.

À court de fermer la base de données et de la rouvrir (une option), comment puis-je nettoyer cela?

Modifier: la fermeture et la réouverture de la connexion à la base de données effacent la mémoire. C'est ma solution à moins que quelqu'un puisse donner un aperçu supplémentaire de ceci.

Répondre

2

J'ai posté cette question sur la liste sqlite-users et j'ai reçu une réponse qui suggérait de réduire la taille du cache pour sqlite. Cela se fait en exécutant l'instruction suivante (ajustement de la valeur de taille désirée):

pragma cache_size = 100 

EDIT: Voici une autre astuce pour libérer nifty mémoire SQLite. Assurez-vous de # définir SQLITE_ENABLE_MEMORY_MANAGEMENT.

décrites ici: http://www.sqlite.org/c3ref/release_memory.html

int bytesReleased = sqlite3_release_memory(0x7fffffff); 
NSLog(@"sqlite freed %d bytes", bytesReleased);