Realm iOS:用捆绑的数据库启动 Realm 有多贵?
Realm iOS: how expensive is it to initiate Realm with a bundled db?
我正在为我的项目使用 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,我需要在非 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 的新引用。