我在HTC Sensation上遇到了android 2.3.4和4.0.3之间的巨大性能差异。
其他一些信息:
时间日志:
ICS(4.0.3)
10-16 09:17:06.206: 1 getting dao
10-16 09:17:06.206: 2 got dao
10-16 09:17:06.206: 2 start call batch task
10-16 09:17:06.216: 3 start initializing batch_task
10-16 09:17:06.326: 121 finished initializing batchtask
10-16 09:17:06.836: 623 end batch task
2.3.4
10-16 09:20:00.355: 0 getting dao
10-16 09:20:00.355: 1 got dao
10-16 09:20:00.355: 1 start call batch task
10-16 09:20:00.355: 1 start initializing batch_task
10-16 09:20:00.435: 87 finished initializing batchtask
10-16 09:20:00.445: 96 end batch task
正如您在ICS上看到的那样,需要创造更多的时间。
我应该怎样做才能在ICS上获得类似的表现?
答案 0 :(得分:3)
因此,在评论中经过一些来回之后,事实证明Android ICS中的性能差异可能是由于默认情况下,在该版本中,SQLite可能正在“TRUNCATE”日志模式下运行。来自Sqlite docs:
相比之下,<2.3> 2.3.4在Write-Ahead-Logging(WAL)模式下运行它。我猜WAL更快。TRUNCATE日记模式通过将回滚日志截断为零长度而不是删除它来提交事务。在许多系统上,截断文件比删除文件要快得多,因为不需要更改包含目录。
要更改ORMLite中的日记,您可以(我猜)执行以下操作:
someDao.rawExecute("PRAGMA journal_mode = WAL;");
有关更多示例,请参阅Sqlite PRAGMA docs。
答案 1 :(得分:1)
最后,我找到了解决方案:
getHelper().getDao();
SQLiteDatabase db = getHelper().getWritableDatabase();
Cursor cursor = db.rawQuery("PRAGMA journal_mode = WAL;", null);
只有这样才有效。
此问题的其他信息:
因此,如果您遇到慢速数据库功能,请检查db上的第一个日志模式。谢谢Gray,感谢您的帮助。