我有一个项目,我在其中请求获取一些对象。经过一些测试,这是我最快的实现,但是我感觉缺少一些东西。我的数据库中有2000个对象用于测试,而计算所需的代码需要3.25秒才能执行。
val allSessions = realm.where(Session::class.java).isNotNull("endDate").findAll()
// added for better performances
val sessionsList = realm.copyFromRealm(allSessions)
val sessionGroup1 = mutableListOf<Session>()
val sessionGroup2 = mutableListOf<Session>()
// otherwise the bottleneck is here, the foreach is slow
sessionsList.forEach { session ->
if (session.isGroup1()) {
sessionGroup1.add(session)
} else {
sessionGroup2.add(session)
}
}
// doComputations(), like sums, averages...
我必须访问所有对象的值以执行求和,平均值等。 最快的方法是什么?
答案 0 :(得分:2)
尝试使用注释将endDate
字段作为索引字段。
像主键一样,这会使写入速度稍慢,但会使读取速度更快。 (这也会使您的Realm文件稍大,以存储索引。)最好仅在针对特定情况优化读取性能时添加索引。
import io.realm.annotations.Index;
@Index
private String endDate;
答案 1 :(得分:1)
我很高兴使用以下方法取得了更好的结果:
@Index
确实有帮助,但对我而言并没有很大帮助RealmResults.sum()
,它是如此之快,您绝对应该考虑一下当前为0.38s,同时在我的代码中保留一个for循环,否则基本计算需要0.16s,因此我的性能提升在10倍至20倍之间!
注意:我不再使用realm.copyFromRealm(allSessions)