我最近阅读了Realm
数据库的内部文档,他们所有的查询都是懒惰的,我不确定,如果我理解这可能会导致的影响。
让我解释一下我是如何理解的,如果我错了,请随时纠正我。我看到它的方式是,每当我发出这样的命令mRealm.where(Customer.class).equalTo(Customer.ID, "someId").findFirst();
时,我都没有获得Java
对象的所有已填充数据,该数据包含在此客户的数据库中。每当我尝试访问此“获取”对象的某些字段时,都会进行查询。因此,我想知道,如果我想要访问给定类的所有字段,那么它是否比OrmLite
更快?
另一个与之相关的问题。对于Realm
或ListView
中显示的项目,使用RecyclerView
db是否是个好主意?如果在滚动列表期间不断进行查询,是否会对性能产生严重影响?
如果有人能够更详细地向我解释,我会很高兴。
答案 0 :(得分:1)
由我们的查询创建的RealmResults会自动更新基础数据的视图。您可以将它们视为类型安全游标,并且它们具有一些相同的权衡,但与Cursors不同,我们不会将数据复制到CursorWindow中,因此不存在分页效果。您可以访问整个对象图,而无需担心达到CursorWindow限制。
大多数ORM将所有数据复制到Java堆内存中。这可能是一个潜在的非常昂贵的操作,包括时间和内存+你可能还有很多你甚至不需要的额外数据。这样做的好处是你只做了一次,然后访问数据真的很快。
另一方面,Realm只加载您实际需要的数据。这也包括个别字段。因此,如果你有一个ListView显示10个项目中的1个字段,我们将只加载那些10个字段,就像CursorAdapter一样。它必须从本机内存加载该数据,虽然这比从Java堆中读取数据更昂贵。
所以回答你的问题。是的,Realm与ListView完美搭配。
答案 1 :(得分:0)
如果你想知道什么是更快的,试试吧;)。可能Realm会更快,因为他们的专有系统比SQLite更优化,甚至可以微调。但这是我的假设
不,它不会对性能产生影响,因为我们假设Realm足够聪明,可以在适当的时候获取真实数据。当使用另一个ORM时,它是相同的,在分页发生时获取数据。