gpt4 book ai didi

json - 使用异步线程时, Realm 数据库大小变为 x100

转载 作者:可可西里 更新时间:2023-11-01 01:36:41 24 4
gpt4 key购买 nike

所以我有一些代码可以将后台数据解析到我的 Realm 数据库中。当我在没有异步线程的情况下进行调用时,数据库需要大约 10 秒来填充(具有 1000 个条目的 JSON)并且应用程序在此期间卡住,因为 swiftyJson 很慢( native JSON 也需要大约 2 秒)。

当我添加异步调用时,它修复了卡住问题,但我的数据库现在是 50 MB,而不是之前的 500kb……知道发生了什么吗?欢迎所有帮助

    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)
}
}
}

最佳答案

在 Realm 中,通常最好的做法是尝试将尽可能多的更改批处理到尽可能少的写入事务(即 realm.write { } 闭包)。

目前,您正在为 for 循环的每次迭代打开一个新的写入事务(即 1000 个写入事务),由于 Realm 在不同线程上快照数据的方式,这可能导致文件大小膨胀.

我建议将该 Realm 的写闭包移动到 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)
}
}
}

如果有帮助,请告诉我! :)

关于json - 使用异步线程时, Realm 数据库大小变为 x100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36711518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com