gpt4 book ai didi

android - 每次查询/写入后关闭 Realm 实例是否可以?

转载 作者:行者123 更新时间:2023-11-30 01:20:12 27 4
gpt4 key购买 nike

我正在尝试找出打开/关闭 Realm 实例的最佳方式。我们在 3 个地方使用 Realm——App、Activity 和 Worker thread。但是,从任何地方访问来自 Realm 的数据可能会很酷。因此,我们将所有 Realm 查询/写入包装在数据层中。是否可以(从性能的角度来看)对每个查询(以及每次写入时类似)执行以下操作?

try (Realm realm = getRealm()) {
return realm.copyFromRealm(realm.where(Task.class).isNull("name")
.findAllSorted("createdAt", Sort.DESCENDING));
}

如何在异步事务中做类似的事情?有更好的方法吗? (我们正在使用 RxJava)。

谢谢!

编辑:在@christian-melchior 快速回复后,我们将像这样使用它:

try (Realm realm = getRealm()) {
return realm.copyFromRealm(realm.where(Task.class).isNull("name")
.findAllSortedAsync("createdAt", Sort.DESCENDING));
}

EDIT2:我们实际上是这样决定的:

Realm realm = getRealm();
return realm.where(Task.class).isNull("name")
.findAllSortedAsync("createdAt", Sort.DESCENDING)
.asObservable()
.filter(RealmResults::isLoaded)
.first()
.map(realmObjects -> {
if (realmObjects.isEmpty()) {
realm.close();
return null;
}
List<Task> res = realm.copyFromRealm(realmObjects);
realm.close();
return res;
});

因为我们希望在每次查询后调用我们的 onComplete

最佳答案

使用 copyFromRealm 将为您提供所有数据的内存副本,因此只要您不加载庞大的列表,它应该可以正常工作。但是,您将使用更多内存,并且始终打开和关闭 Realms 会产生轻微的开销。

控制 Realm 生命周期的一个想法可以在这里看到:https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances

另请注意,如果您担心在 UI 线程上加载数据,在许多情况下可以使用我们的异步 API:https://realm.io/docs/java/latest/#asynchronous-queries

关于android - 每次查询/写入后关闭 Realm 实例是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236594/

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