2

好吧,就像标题所说的那样,我在使用 ormLite 对 DAO 对象执行 queryForAll 时遇到了一些性能问题(如果需要的话,使用 android)。

我实际上正在做的唯一一件事就是执行这个:

this.getHelper().getActivityDao().queryForAll(); (其中 this.getHelper() 返回从 OrmLiteSqliteOpenHelper 类扩展的数据库助手)

这条单行实际上需要大约 14 秒才能执行......好吧,“Activity”实体有大约 80 个字段,并且 queryForAll 返回一个长度为 74 个对象的数组,但仍然 - 这不正常,可以吗?

(对于我正在使用的日历字段

@DatabaseField(dataType = DataType.SERIALIZABLE)

注释,我不确定这是否是日历字段的正确注释,或者它是否会导致性能问题......)

4

2 回答 2

3

这条单行实际上需要大约 14 秒才能执行......好吧,“Activity”实体有大约 80 个字段,并且 queryForAll 返回一个长度为 74 个对象的数组,但仍然 - 这不正常,可以吗?

AqueryForAll()不应该花费很长时间,除非您可能怀疑,您的表中有大量对象——或者每个对象中有大量数据。在那种情况下,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
}
于 2012-09-27T17:03:53.947 回答
1

你的类是否有你用 ORM 自动刷新的外来对象或集合?我的意思是,例如foreignAutoRefresh = true带有注释的成员或带有注释的集合。@ForeignCollectionField(eager = true)这些注释将代表您执行更多查询。

如果是这种情况,您可能会无意中撤回比您想象的更多的数据。在这种情况下,我会queryRaw()为您需要的数据手动使用和编写一个连接语句。

于 2012-09-27T17:09:50.203 回答