好吧,就像标题所说的那样,我在使用ormLite在DAO对象上执行queryForAll时遇到了一些性能问题(如果它很重要的话,还有android)。
我实际上唯一要做的就是执行此操作:
this.getHelper()getActivityDao()queryForAll()。; (其中this.getHelper()返回从OrmLiteSqliteOpenHelper类扩展的database-helper)
这一行实际上需要大约14秒来执行...好吧,“Activity”实体有大约80个字段,queryForAll返回一个长度为74个对象的数组,但仍然 - 这不正常,可以吗?
(对于我使用
的日历字段@DatabaseField(dataType = DataType.SERIALIZABLE)
注释,我不确定,如果这是日历字段的正确注释,或者它是否会导致性能问题......)
答案 0 :(得分:3)
这一行实际上需要大约14秒来执行...好吧,“Activity”实体有大约80个字段,queryForAll返回一个长度为74个对象的数组,但仍然 - 这不正常,可以吗?
queryForAll()
不应该花费很长时间,除非你可能怀疑,你的表中有一些大个对象 - 或者每个对象中有大量数据。在这种情况下,queryForAll()
必须基本上转储整个表并创建大量对象。
对于较大的查询,建议使用迭代器而不是转储整个表:
例如,您可以像这样运行查询中的所有对象:
// page through all of the accounts in the database
for (Account account : accountDao) {
// do something with each account here
}
答案 1 :(得分:1)
您的课程中是否有使用ORM自动刷新的外来对象或集合?这样,我的意思是用foreignAutoRefresh = true
注释的成员或用@ForeignCollectionField(eager = true)
注释的集合。这些注释将代表您执行更多查询。
如果是这种情况,您可能无意中撤回了比您想象的更多的数据。在这种情况下,我会使用queryRaw()
并手动编写连接语句以获取所需数据。