2016-03-29 8 views
0

Ich habe eine Realm-db, die asynchron geschrieben wird, und die Dateigröße scheint exponentiell während einer anfänglichen Belastung von einem Rest API zu wachsen. Es wächst weiter, nachdem ich mit 1,5 GB fertig geschrieben habe.Minimierung von Realm-Dateigröße: Praktischer Ansatz

Mit einem writeCopyToPath sind die zugrunde liegenden Daten 1,5 Mb.

Unten ist mein Befehl insert:

dispatch_async(dispatch_queue_create("background", nil)) { 
let realm = try! Realm() 
let this_activity = DataManager().getExerciseById(activity_id) 
if this_activity != nil { 
for (_, subJson) in data_ball["mapPoints"] { 
    let map_point = MapPoint(this_activity:this_activity!, json: subJson) 
    try! realm.write { 
     realm.add(map_point) 
    } 
} 
} 

Zur Abfrage ich einen Datenmanager haben, die von jedem Viewcontroller (, aber nicht gehalten, nachdem sie mit Daten zurückgibt) instanziiert wird. Der Datenmanager verfügt über folgende Abfragemethoden:

Diese Abfragen und Vorgänge einfügen können während desselben Zeitraums auftreten. Mit welchen Strategien sollte ich verhindern, dass es so wächst?

+0

In welchen Threads werden Ihre Inserts ausgeführt? – bdash

+0

Ich starte einen neuen Thread mit 'dispatch_async (dispatch_queue_create (" background ", nil)) {' sollte ich das einfach entfernen? – John

+0

Können Sie versuchen, einen Autorelease-Pool um den gesamten Code in dem Block hinzuzufügen, den Sie an "dispatch_async" übergeben? – bdash

Antwort

2

Es ist wahrscheinlich, dass Sie einen Verweis auf eine ältere Version der Daten haben und verhindern, dass sie zurückgewonnen wird. Werfen Sie einen Blick auf die File size & tracking of intermediate versions Abschnitt von Realms Dokumentation für weitere Informationen.

+0

Beziehen Sie sich auf eine Instanz der db z. B. .. 'let realm = try! Realm() 'oder die Realm-Objekte selbst? Ich möchte an den Objekten festhalten, aber ich habe nicht vor, ihnen zu schreiben - wie könnte ich fortfahren? – John

+0

Beide. Wenn Sie ein wenig mehr Informationen darüber geben können, wie Ihr Code strukturiert ist und in die Datenbank schreibt, kann ich meine Antwort erweitern, um die Probleme zu behandeln, die Sie wahrscheinlich ansprechen. Mein Verdacht besteht darin, dass Sie aufgrund von Netzwerkaktivitäten Schreibvorgänge auf Blöcken ausführen, die in Dispatchwarteschlangen ausgeführt werden. Wenn das der Fall ist, ist es wahrscheinlich die Lösung, Ihre Verwendung von Realm in Autorelease-Pools zu verpacken. – bdash

+0

Bearbeitet mit Codebeispiel. – John

Verwandte Themen