android - Realm 惰性查询 - 它们比 OrmLite 更快吗?

标签 android performance orm realm ormlite

我最近阅读了 Realm 数据库的内部文档,其中所有查询都是惰性的,我不确定我是否正确理解了这可能导致的影响。

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

另一个与之相关的问题。对于将在 ListViewRecyclerView 中显示的项目使用 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/

相关文章:

java - 一个android新手在30天内顺利完成一个项目并提交给ADC2现实吗?

java - 从背面的字符串中删除破折号或删除键?

java - 如何将Gradle项目编译为可以在Android应用程序中使用的jar文件

Javascript setInterval - 如何设置良好的时间和性能

java - 理解 ORMLite

android - 复选框和复选框文本不在同一行android

Ruby GServer 性能

c++ - 是否有一个 GNU C 编译器选项可以生成运行速度比默认设置更快但精度更低的浮点程序?

java - 如何在 hibernate 中使用带有位置参数的@Loader?

python - 具有多个连接的 Django ORM 查询