Wie erhält man die Größe der Daten im Coredata Store?

8

Wie Sie die Gesamtspeichergröße in Datenbytes in Core-Datenspeicher ermitteln können. Und wie Sie die Speichergröße für bestimmte Datenzeilen ermitteln können.

    
Deepak 12.06.2014, 07:28
quelle

3 Antworten

6

Auf iOS 7 und höher ältere Antworten funktionieren aufgrund von SQLite-Journaldateien nicht mehr für persistente SQLite-Speicher. Für jede beständige Speicherdatei müssen Sie die Größe der SQLite-Datei selbst (zB Foo.sqlite ) und die Größe der Journaldateien (zB Foo.sqlite-wal und Foo.sqlite-shm ) ermitteln und die Größen hinzufügen um die Summe zu bekommen. Dies ist sehr wichtig, da es sehr wahrscheinlich ist, dass die meisten Daten tatsächlich in den Journaldateien enthalten sind. Sie können NSFileManager verwenden, um diese Informationen für jede Datei abzurufen.

Wenn Sie binäre Attribute in Ihrem Modell verwenden und Sie haben "Erlaube externen Speicher" für jedes dieser Attribute aktiviert, wird es komplizierter. In diesem Fall müssen Sie alle externen Speicherdateien finden und deren Größe addieren. Ihr Speicherort ist nicht dokumentiert, sollte sich jedoch in einem Unterverzeichnis des Verzeichnisses befinden, in dem die SQLite-Datei gefunden wird. Suchen Sie für eine SQLite-Datei mit dem Namen Foo.sqlite ein Verzeichnis mit dem Namen .Foo_SUPPORT/_EXTERNAL_DATA , und die externen Binärdateien sind dort vorhanden. Da dies nicht dokumentiert ist, kann es ohne Vorankündigung geändert werden.

Ein besserer Ansatz - wenn es nicht zu spät ist - ist, den persistenten Speicher in ein eigenes Unterverzeichnis zu legen. Erstellen Sie ein neues Verzeichnis innerhalb von Dokumenten und legen Sie Ihre SQLite-Datei dort ab, anstatt sie in das Dokumentenverzeichnis zu legen. Erstellen Sie ein Verzeichnis mit dem Namen data und geben Sie Foo.sqlite ein. Um die Größe zu addieren, scanne einfach rekursiv jede Datei in data und summiere die Größe. Dann fangen Sie alles, sogar wenn Sie Journaling oder externe Binärdateien oder was auch immer in zukünftigen Versionen von iOS ändern. Ein guter Weg, um den Scan durchzuführen, wäre mit NSFileManager s enumeratorAtPath: oder enumeratorAtURL:includingPropertiesForKeys:options:errorHandler: Methoden.

Das Ermitteln der Speichergröße für eine bestimmte Datenzeile ist eine ganz andere Frage, und es gibt keine allgemeine Lösung. Es gibt den Overhead jeder Objektinstanz plus Ihrer Attribute sowie alle internen undokumentierten Objekte, die NSManagedObject erstellen kann (einschließlich Instanzvariablen und dynamisch zugewiesenem Speicher). Es ist nicht einmal ein fester Wert, da Daten im laufenden Betrieb zugewiesen und freigegeben werden können. Die Größe nur Ihrer Attribute zu addieren, ist einfach - führen Sie sie einfach durch und addieren Sie die Größe jedes einzelnen (Stringlänge, Datenlänge usw.), aber es ist nicht das vollständige Bild.

    
Tom Harrington 23.06.2014 19:05
quelle
1
%Vor%     
Zelko 23.06.2014 04:27
quelle
0

Versuchen Sie es zu benutzen- & gt;

%Vor%     
LLIAJLbHOu 23.06.2014 12:17
quelle

Tags und Links