首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用异步线程时,领域数据库大小为x100。

当使用异步线程时,领域数据库大小为x100。
EN

Stack Overflow用户
提问于 2016-04-19 07:32:56
回答 1查看 66关注 0票数 2

所以我有一些代码可以将背景数据解析到我的领域数据库中。当我在没有异步线程的情况下进行调用时,数据库需要大约10秒的时间(JSON包含1000个条目),而应用程序在这段时间内会冻结,因为swiftyJson速度慢(原生JSON也需要大约2秒)。

当我添加异步调用时,它修复了冻结问题,但是我的数据库现在是50 MB,而不是以前的500 MB.知道怎么回事吗?欢迎所有的帮助。

代码语言:javascript
复制
    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)
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-19 08:47:08

在领域中,通常最好的做法是尽可能多地处理更改,以尽可能少地编写事务(即realm.write { }闭包)。

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

我建议将这个领域写闭包移到for循环的外部:

代码语言:javascript
复制
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)
      }
   }
}

请告诉我这是否有帮助!:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36711518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档