好吧,就像标题说的,我在用ormlite(如果有关系的话,用android)对dao对象执行queryforall时遇到了一些性能问题。
我唯一要做的就是:
this.gethelper().getactivitydao().queryforall();(其中this.gethelper()返回从ormlitesqliteopenhelper类扩展的数据库助手)
这一行实际上需要大约14秒来执行…好吧,“activity”实体有大约80个字段,queryforall返回一个长度为74个对象的数组,但是-这不可能是正常的,不是吗?
(对于我使用的日历字段
@databasefield(datatype=datatype.serializable)
注释,我不确定这是否是日历字段的正确注释,或者是否可能导致性能问题…)
最佳答案
这一行实际上需要大约14秒来执行…好吧,“activity”实体有大约80个字段,queryforall返回一个长度为74个对象的数组,但是-这不可能是正常的,不是吗?queryForAll()
不应该花费很长时间,除非您可能怀疑表中有大量对象,或者每个对象中有大量数据。在这种情况下,queryForAll()
必须基本上转储整个表并创建大量对象。
对于较大的查询,建议使用迭代器而不是转储整个表:
http://ormlite.com/docs/iterator
例如,您可以运行查询中的所有对象,如下所示:
// page through all of the accounts in the database
for (Account account : accountDao) {
// do something with each account here
}