所以我有一些代码可以将背景数据解析到我的领域数据库中。当我在没有异步线程的情况下进行调用时,数据库需要大约10秒的时间(JSON包含1000个条目),而应用程序在这段时间内会冻结,因为swiftyJson速度慢(原生JSON也需要大约2秒)。
当我添加异步调用时,它修复了冻结问题,但是我的数据库现在是50 MB,而不是以前的500 MB.知道怎么回事吗?欢迎所有的帮助。
func loadDataForLocalCategory() {
let URL = "SomeURL"
Alamofire.request(.GET, URL).validate().responseJSON { response in
switch response.result {
case .Success:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
if let value = response.result.value {
let realm = try! Realm()
let json = JSON(value)
for item in json["result"].arrayValue {
let localCategory = LocalDataCategory()
localCategory.id = item["id"].intValue
// print(item["name"].stringValue)
localCategory.name = item["name"].stringValue
try! realm.write {
realm.add(localCategory,update: true)
}
}
}
}
case .Failure(let error):
print(error)
}
}
}发布于 2016-04-19 08:47:08
在领域中,通常最好的做法是尽可能多地处理更改,以尽可能少地编写事务(即realm.write { }闭包)。
目前,您正在为for循环的每个迭代打开一个新的写事务(即1000个写事务),这可能会导致文件大小因不同线程上的领域快照数据的方式而膨胀。
我建议将这个领域写闭包移到for循环的外部:
if let value = response.result.value {
let realm = try! Realm()
let json = JSON(value)
realm.write {
for item in json["result"].arrayValue {
let localCategory = LocalDataCategory()
localCategory.id = item["id"].intValue
// print(item["name"].stringValue)
localCategory.name = item["name"].stringValue
realm.add(localCategory,update: true)
}
}
}请告诉我这是否有帮助!:)
https://stackoverflow.com/questions/36711518
复制相似问题