私は非同期に書き込まれるレルムデータベースを持っています。ファイルサイズは、Rest APIからの初期ロード中に指数関数的に増加するようです。それは私がそれに書き終わった後、成長し続け、1.5GBでトッピングします。レルムファイルサイズの最小化:実践的アプローチ
writeCopyToPath
を使用すると、基礎となるデータは1.5Mbです。以下は
私の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)
}
}
}
私はそれぞれのViewController(それはデータを返した後に上に保持されていない)によってインスタンス化されたデータマネージャを持って照会するには。データマネージャには次のようなクエリメソッドがあります。
func getSegments(activity_id:String) -> [Dictionary<String, AnyObject>]{
var intervals:[Dictionary<String, AnyObject>] = []
let realm = try! Realm()
let predicate = NSPredicate(format: "id == %@", activity_id)
let intervals = realm.objects(Segment).filter(predicate).sorted("startTime", ascending: true)
for interval in intervals {
intervals.append(interval.toDictionary())
}
return intervals
}
これらのクエリと挿入操作は、同じ期間に発生する可能性があります。このように成長するのを止めるために私はどのような戦略をとるべきですか?
あなたのインサートはどのスレッドで実行されていますか? – bdash
私は 'dispatch_async(dispatch_queue_create(" background "、nil)){'これを削除するだけで新しいスレッドを開始しますか? – John
'dispatch_async'に渡すブロック内のコード全体に自動解放プールを追加できますか? – bdash