Ich führe eine Reihe von Abfragen während des gesamten Lebenszyklus meiner App.Wann öffnen und schließen Sie eine SQlite DB im iOS-Lebenszyklus?
Ich verwende derzeit FMDB (Ein Objective-C Wrapper um die SQLite C API), und ich öffne und schließe vor jeder Abfrage.
FMDatabase * db = [FMDatabase databaseWithPath:pathToMyDB];
[db open]
FMResultSet * s = [db executeQuery:@"SELECT * FROM myTable"];
// Use FMResultSet
[db close];
öffnen und schließen Trigger fopen()
und fclose()
unten, so glaube ich, dass ich, indem die Datenbank öffnen einen notgedrungen Sieg gewinnen.
Ich glaube jedoch, temporäre Objekte werden aufgebaut, was zu Speicherproblemen führen könnte. Closing the database löscht die temporären Objekte.
- Wann sollte ich die Datenbankverbindung öffnen und schließen? (z. B. Anwendung eingegeben Backgound?)
- Sollte ich VACUUM in Situationen mit wenig Speicher ausführen?
Vielen Dank für die Antwort. Sind Sie 100% sicher, dass die Datenbank keine Objekte erstellt und/oder behält? Sie haben wahrscheinlich Recht, aber diese Dokumentation sagt: "SQLITE_OK zurückgeben, wenn das sqlite3-Objekt erfolgreich zerstört wird ** und alle zugeordneten Ressourcen freigegeben werden" "Ich denke, http://www.sqlite.org/c3ref/close.html – Robert
Die zugehörigen Ressourcen beziehen sich auf die Verbindung selbst und einige andere Dinge, auf die Sie zugreifen müssen. Wie ich sagte, bin ich nicht sicher, Server-Datenbanken tun dies. Andererseits müssen sie an sich nicht geöffnet werden. Tue es wie gesagt, teste es so: in einer separaten Klasse offene Datenbank, führe eine lächerliche Menge an Abfragen aus (während du den Speicher beobachtest) und schließe sie dann. Es sollte offensichtlich sein, was passiert. Wenn Sie ein Objekt behalten, werden Sie sehen, dass der Speicher weiter wächst, bis die App abstürzt, wenn nicht alles bei einer relativen konstanten Speicherzuweisung bleiben sollte. Das ist der einfachste Weg, um sicher zu gehen. – skytz