我最近阅读了 Realm
数据库的内部文档,其中所有查询都是惰性的,我不确定我是否正确理解了这可能导致的影响。
让我解释一下我的理解,如果我错了,请随时纠正我。我的看法是,每当我发出这样的命令 mRealm.where(Customer.class).equalTo(Customer.ID, "someId").findFirst();
我就不会得到 Java
对象,包含所有填充的数据,该数据包含在该客户的数据库中。相反,每当我尝试访问此“获取的”对象的某些字段时,就会进行查询。因此我想知道,如果我想访问给定类的所有字段,这是否比 OrmLite
更快?
另一个与之相关的问题。对于将在 ListView
或 RecyclerView
中显示的项目使用 Realm
数据库是个好主意吗?如果在滚动列表的过程中不断进行查询,不是会对性能造成严重影响吗?
如果有人可以更详细地向我解释这一点,我会非常高兴。
最佳答案
由我们的查询创建的 RealmResults 是自动更新底层数据的 View 。您可以将它们视为类型安全游标,并且它们具有一些相同的权衡,但与游标不同的是,我们不会将数据复制到 CursorWindow 中,因此没有分页效果。您可以访问整个对象图,而不必担心达到 CursorWindow 限制。
大多数 ORM 将所有数据复制到 Java 堆内存中。这可能是一个可能在时间和内存方面都非常昂贵的操作+您可能有很多甚至不需要的额外数据。这样做的好处是只需执行一次,访问数据的速度就会非常快。
另一方面,Realm 只加载您实际需要的数据。这也包括各个 Realm 。因此,如果您有一个 ListView 显示 10 个项目中的 1 个字段,我们将只加载这 10 个字段,就像 CursorAdapter 一样。它必须从 native 内存加载该数据,但这比从 Java 堆读取数据更昂贵。
所以回答你的问题。是的,Realm 与 ListView 配合得很好。
关于android - Realm 惰性查询 - 它们比 OrmLite 更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219165/