Wie finde ich die Größe meines persistenten Kerndatenspeichers und den freien Speicherplatz im Dateisystem?

7

Ich arbeite an einer Datenbankanwendung mit dem Core Data Framework. In dieser Anwendung muss ich anzeigen, wie viele Daten die Anwendung derzeit auf dem iPhone verwendet. Gibt es eine Möglichkeit, dies zu tun?

    
Nic 12.11.2009, 04:31
quelle

3 Antworten

9

Ich habe diese Antwort in den Apple Dev-Foren , um nützlich zu sein, um Speicherplatz auf der Home-Verzeichnispartition der Apps zu finden (beachten Sie, dass auf jedem Gerät derzeit zwei Partitionen vorhanden sind).

Verwenden Sie NSPersistentStoreCoordinator , um Ihre Geschäftskollektion zu erhalten.

Verwenden Sie NSFileManager , um die Größe jeder Filiale in Byte (unsigned long long)

zu ermitteln %Vor%

Beachten Sie, dass sich der obige Code in einer Methode meines App-Delegaten befindet und eine Eigenschaft persistentStoreCoordinator hat.

    
ohhorob 08.12.2009, 21:09
quelle
9

Ihr persistenter Speicher in Core Data ist nur eine Datei im Dateisystem. Sie greifen auf diese Datei zu und erstellen sie möglicherweise, wenn Sie Ihren Core Data-Stack erstellen. Der folgende Code wird die Größe eines permanenten Speichers und des freien Speicherplatzes des Dateisystems in Byte ausgeben:

%Vor%

Dies setzt voraus, dass Ihr persistenter Speicher den Namen persistentstore.sqlite hat und im Dokumentenverzeichnis für Ihre Anwendung gespeichert ist. Wenn Sie sich bezüglich des Namens Ihres persistenten Speichers unsicher sind, suchen Sie nach dem Ort, an dem Sie Ihren NSPersistentStoreCoordinator zuweisen und initalisieren. Der Name des Geschäfts sollte irgendwo im Code dort angegeben werden.

Beachten Sie, dass die von den Datei- und Dateisystemattribut-Wörterbüchern zurückgegebenen Werte NSNumbers sind. Sie müssen sie daher in Skalartypen konvertieren, wenn Sie auf diese Weise mit den Dateigrößen arbeiten möchten. Eine Sache, auf die Sie achten müssen, ist, dass diese Werte in Bytes angegeben sind. Bei Multi-Gigabyte-Dateisystemen können Sie daher mit 32-Bit-Ganzzahl-Datentypen auf Größenbeschränkungen stoßen.

    
Brad Larson 12.11.2009 16:15
quelle
1

Ich bin mir nicht sicher, wo ich es gesehen habe, aber ich glaube , dass das Entfernen von Einträgen aus der Datenbank die Datenbankdatei nicht unbedingt verkleinert. SQLite lädt den Speicher intern zurück und verwendet ihn erneut. (Dies ist typisch für RDBMS.) Ich glaube, irgendwo gibt es ein Befehlszeilendienstprogramm, das es komprimieren wird, aber das wird Ihnen nicht helfen, wenn Ihre App die Datei auf das Dataset verkleinern möchte (um beispielsweise Speicherplatz für das Betriebssystem freizugeben). .

Die Methode der Dateigröße gibt Ihnen zwar einen Eindruck von der Größe der Datenbank mit dem höchsten Wasserzeichen, aber sie wird Ihnen nicht unbedingt die Menge des von Ihrem Dataset verwendeten Speichers mitteilen.

    
David Goodine 07.02.2010 21:23
quelle