ios - Realm iOS : how expensive is it to initiate Realm with a bundled db?

标签 ios swift database realm realm-mobile-platform

我在我的项目中使用 Realm,我需要在非 UI 阻塞线程(即后台)中查询结果列表,只读;我查阅了Realm的文档,似乎我需要在查询它的同一个线程中创建Realm实例,所以我想知道如果我每次都重新创建Realm对象,代价有多大?

@IBAction func scoreAction(_ sender: Any?) {
    DispatchQueue.global(qos: .background).async }
        let scores = loadScore()
        DispatchQueue.main.async {
            display(scores)
        }
    }
}

然后:

func loadScore() -> [Score] {
    let realm = try! Realm(configuration: config)
    return realm.objects(Score.self).filter("some criteria")
}

最佳答案

调用 Realm 的初始化程序实际上并不创建新数据库,它只是在所使用的 RealmConfiguration 中指定的位置创建对现有 Realm 数据库的新引用在Realm的初始化器中。这意味着,一般来说,一旦数据库打开,通过调用 Realm() 或 Realm(configuration: config) 创建对其的新引用在计算上并不昂贵。因此,一般来说,在线程之间切换时创建对 Realm 的新引用通常更有意义。

当然,要确定哪种方式适合您的特定用例,您实际上需要在真实设备上运行测试,但只要您不频繁地在线程之间切换(比如几个线程)一秒内多次),在两个线程之间切换后,您应该可以在两个线程上创建对 Realm 的新引用。

关于ios - Realm iOS : how expensive is it to initiate Realm with a bundled db?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711871/

相关文章:

ios - 如何在 Swift 中创建这样的菜单?

uitableview - prepareForSegue 错误 Thread 1 : EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)

ios - 如何同时观察两个用户之间的所有 firebase 数据库事件?

javascript - 表未显示 laravel vue 组件中数据库的数据

mysql - 如果预计数据库表以后会增加更多列,那么将这些列保留为另一个表的行是否是好的设计?

mysql - 将本地MySQL数据库同步到线上

ios - iPhone应用程序映射当前用户位置GIF

ios - 使用 CFBundleVersion 比较提交的应用程序的不同版本是否正确

ios - 使用 FBSDKShareButton 上传图片到 Facebook

generics - Swift 中什么时候需要或需要泛型函数?