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?Wie finde ich die Größe meines persistenten Kerndatenspeichers und den freien Speicherplatz im Dateisystem?
Antwort
Ich fand this answer on the Apple Dev Forums als nützlich für das Auffinden von Speicherplatz auf der Home-Verzeichnispartition der Anwendungen (beachten Sie, dass derzeit zwei Partitionen auf jedem Gerät vorhanden sind).
Verwenden Sie NSPersistentStoreCoordinator
, um Ihre Geschäftskollektion zu erhalten.
Verwenden NSFileManager
auf jede Größe speichert erhalten in Bytes (unsigned long long)
NSArray *allStores = [self.persistentStoreCoordinator persistentStores];
unsigned long long totalBytes = 0;
NSFileManager *fileManager = [NSFileManager defaultManager];
for (NSPersistentStore *store in allStores) {
if (![store.URL isFileURL]) continue; // only file URLs are compatible with NSFileManager
NSString *path = [[store URL] path];
DebugLog(@"persistent store path: %@",path);
// NSDictionary has a category to assist with NSFileManager attributes
totalBytes += [[fileManager attributesOfItemAtPath:path error:NULL] fileSize];
}
Beachten Sie, dass der Code oben in einem Verfahren meiner AppDelegate ist, und es hat eine Eigenschaft persistentStoreCoordinator
.
Vielen Dank :-) – Nic
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 persistenten Speicher und den freien Speicherplatz des Dateisystems, in Bytes drucken:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *persistentStorePath = [documentsDirectory stringByAppendingPathComponent:@"persistentstore.sqlite"];
NSError *error = nil;
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:persistentStorePath error:&error];
NSLog(@"Persistent store size: %@ bytes", [fileAttributes objectForKey:NSFileSize]);
NSDictionary *fileSystemAttributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:persistentStorePath error:&error];
NSLog(@"Free space on file system: %@ bytes", [fileSystemAttributes objectForKey:NSFileSystemFreeSize]);
Dies setzt voraus, dass Ihr persistenten Speicher wird persistentstore.sqlite
genannt und ist im Dokumentenverzeichnis für Ihre Anwendung gespeichert. 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 in dem 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 sollten, ist, dass diese Werte in Bytes angegeben sind. Bei Multi-Gigabyte-Dateisystemen könnten Sie daher mit 32-Bit-Ganzzahl-Datentypen auf Größenbeschränkungen stoßen.
Danke Brad. Es ist hilfreich ... – Nic
@Brad: Wissen Sie, ob das System einer App erlaubt, die volle (oder nahe) Nutzung des freien Speicherplatzes im Dateisystem zu nutzen? Oder gibt der freie Speicherplatz das Maximum zurück, das das System der App zuweist? – mahboudz
Auf einem Gerät scheint es, den gesamten Speicherplatz im internen Flash-Speicher freizugeben (der zurückgegebene Wert entspricht dem von iTunes gemeldeten freien Speicherplatz). Ich nehme an, dass die Anwendung so viel Platz zum Arbeiten hat. –
Nicht sicher, wo ich es sah, aber ich glaube,, dass das Entfernen von Einträgen aus der Datenbank wird nicht unbedingt die Datenbankdatei verkleinern. 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). .
Während die Dateigrößenmethode Ihnen einen Eindruck von der High-Water-Mark-Größe der Datenbank vermittelt, wird Ihnen nicht unbedingt die Speichermenge mitgeteilt, die von Ihrem Dataset verwendet wird.
- 1. Wie kann ich den freien Speicherplatz einer CD-ROM ermitteln?
- 2. Wie kann ich die Größe meines Repositorys reduzieren?
- 3. Wie berechnet man freien Speicherplatz?
- 4. Wie finde ich den freien Speicherplatz für einen bestimmten Pfad auf einer Linux-Shell?
- 5. Wie finde ich die Hauptfunktion meines Programms (...)?
- 6. Ich finde 'fdinfo' im/proc-Dateisystem nicht
- 7. Wie bekomme ich den Speicherplatz auf einem Server?
- 8. IMAPI: Wie bekomme ich die Bildgröße, ohne eine Ausnahme auszulösen, wenn die Bildgröße den freien Speicherplatz überschreitet?
- 9. Wie finde ich die Mieter-ID meines SharePoint Online-Kontos
- 10. Wie finde ich die Größe einer Struktur?
- 11. Speicherplatz meines Dateisystems in SD-Karte für Himbeer-Pi
- 12. Wie finde ich die unveränderbare ID meines Google Apps-Kontos?
- 13. Wie finde ich die Stellen von Systemaufrufen meines Programms?
- 14. Wie kann ich den verfügbaren freien Speicherplatz auf bereitgestellten Volumes mit Perl finden?
- 15. Sollte ich bei abnormaler Beendigung freien Speicherplatz freigeben?
- 16. Wie wird File.getFreeSpace() mit einer beliebigen Datei verwendet, um den freien Speicherplatz in Java zu erhalten?
- 17. Wie reserviere ich Speicherplatz im MS SQL-Skript?
- 18. Wie kann ich die Größe der Schaltflächen meines Optionsmenüs ändern?
- 19. Wie kann ich den Endpunkt meines Torprozesses im Stamm ändern?
- 20. JHipster Wie speichere ich Dateien im Dateisystem?
- 21. Wie finde ich die Größe der Pooling-Layer in Caffe?
- 22. Wie finde ich Dateigrößen im bzip2-Archiv ohne zu entpacken?
- 23. Wie kann ich den Speicherplatz in MATLAB ermitteln?
- 24. C# Wie finde ich die Größe eines Referenztyps?
- 25. Wie kann ich die Vorbelegung meines Threads im Benutzermodus vermeiden?
- 26. Wie finde ich den Code, der die Größe meiner Anwendung sprengt?
- 27. Wie finde ich den Dateisystemtyp in Python
- 28. Wie ermittle ich die Größe meiner HBase Tabellen? Gibt es einen Befehl dazu?
- 29. Messen von freien Speicherplatz auf dem Bildschirm in Android
- 30. Wie finde ich die Größe eines std :: bitset zur Kompilierzeit
zusätzlich wie viele Daten eine Anwendung in iPhone speichern kann ??? – Nic