领域懒惰的查询 - 它们比OrmLite更快吗?

时间:2016-02-05 08:10:02

标签: android performance orm realm ormlite

我最近阅读了Realm数据库的内部文档,他们所有的查询都是懒惰的,我不确定,如果我理解这可能会导致的影响。

让我解释一下我是如何理解的,如果我错了,请随时纠正我。我看到它的方式是,每当我发出这样的命令mRealm.where(Customer.class).equalTo(Customer.ID, "someId").findFirst();时,我都没有获得Java对象的所有已填充数据,该数据包含在此客户的数据库中。每当我尝试访问此“获取”对象的某些字段时,都会进行查询。因此,我想知道,如果我想要访问给定类的所有字段,那么它是否比OrmLite更快?

另一个与之相关的问题。对于RealmListView中显示的项目,使用RecyclerView db是否是个好主意?如果在滚动列表期间不断进行查询,是否会对性能产生严重影响?

如果有人能够更详细地向我解释,我会很高兴。

2 个答案:

答案 0 :(得分:1)

由我们的查询创建的RealmResults会自动更新基础数据的视图。您可以将它们视为类型安全游标,并且它们具有一些相同的权衡,但与Cursors不同,我们不会将数据复制到CursorWindow中,因此不存在分页效果。您可以访问整个对象图,而无需担心达到CursorWindow限制。

大多数ORM将所有数据复制到Java堆内存中。这可能是一个潜在的非常昂贵的操作,包括时间和内存+你可能还有很多你甚至不需要的额外数据。这样做的好处是你只做了一次,然后访问数据真的很快。

另一方面,

Realm只加载您实际需要的数据。这也包括个别字段。因此,如果你有一个ListView显示10个项目中的1个字段,我们将只加载那些10个字段,就像CursorAdapter一样。它必须从本机内存加载该数据,虽然这比从Java堆中读取数据更昂贵。

所以回答你的问题。是的,Realm与ListView完美搭配。

答案 1 :(得分:0)

  1. 如果你想知道什么是更快的,试试吧;)。可能Realm会更快,因为他们的专有系统比SQLite更优化,甚至可以微调。但这是我的假设

  2. 不,它不会对性能产生影响,因为我们假设Realm足够聪明,可以在适当的时候获取真实数据。当使用另一个ORM时,它是相同的,在分页发生时获取数据。