Android 4.0.3(ICS)上的Ormlite性能

Android 4.0.3(ICS)上的Ormlite性能,android,performance,android-4.0-ice-cream-sandwich,ormlite,Android,Performance,Android 4.0 Ice Cream Sandwich,Ormlite,我在HTC Sensation上体验到android 2.3.4和4.0.3之间的巨大性能差异 一些补充资料: ormlite版本4.42 要获得dao,我使用DaoManager和dao单例 使用批处理任务插入 我正在尝试创建或更新30个对象(仅创建需要相同的时间) 这些是单个对象(没有关系),但具有长字符串字段 时间日志: ICS(4.0.3) 2.3.4 正如您在ICS上看到的,创建ICS需要更多的时间 我应该怎么做才能在ICS上获得类似的性能呢?因此,在评论中反复讨论之后,发现And

我在HTC Sensation上体验到android 2.3.4和4.0.3之间的巨大性能差异

一些补充资料:

  • ormlite版本4.42
  • 要获得dao,我使用DaoManager和dao单例
  • 使用批处理任务插入
  • 我正在尝试创建或更新30个对象(仅创建需要相同的时间)
  • 这些是单个对象(没有关系),但具有长字符串字段
时间日志:

ICS(4.0.3)

2.3.4

正如您在ICS上看到的,创建ICS需要更多的时间


我应该怎么做才能在ICS上获得类似的性能呢?

因此,在评论中反复讨论之后,发现Android ICS的性能差异可能是由于默认情况下,在该版本中,SQLite可能以“TRUNCATE”日志模式运行。从:

TRUNCATE journaling模式通过将回滚日志截断为零长度而不是删除它来提交事务。在许多系统上,截断文件比删除文件快得多,因为不需要更改包含文件的目录

2.3.4相比之下,在(WAL)模式下运行。我想沃尔更快

要在中更改日志,您可以(我猜)执行以下操作:

someDao.rawExecute("PRAGMA journal_mode = WAL;");

有关更多示例,请参见。

因此,在评论中反复讨论之后,发现Android ICS中的性能差异可能是由于默认情况下,在该版本中,SQLite可能以“TRUNCATE”日志模式运行。从:

TRUNCATE journaling模式通过将回滚日志截断为零长度而不是删除它来提交事务。在许多系统上,截断文件比删除文件快得多,因为不需要更改包含文件的目录

2.3.4相比之下,在(WAL)模式下运行。我想沃尔更快

要在中更改日志,您可以(我猜)执行以下操作:

someDao.rawExecute("PRAGMA journal_mode = WAL;");

有关更多示例,请参见。

最后,我找到了解决方案:

getHelper().getDao();
SQLiteDatabase db = getHelper().getWritableDatabase();
Cursor cursor = db.rawQuery("PRAGMA journal_mode = WAL;", null);
只有这样才有效

有关此问题的其他信息:

  • 我有两个HTC Sensation,都更新到了ICS,所以升级到了4.0.3
  • 但是软件数量是不同的!!(3.33.401.53和3.33.401.6),并且设备上没有可用的更新(这很奇怪)。我真的不明白发生了什么,也许他们在构建之间更改了默认日志模式

所以,如果您有experince slow数据库函数,请检查db上的第一个日志模式。谢谢格雷,谢谢你的帮助

最后,我找到了解决方案:

getHelper().getDao();
SQLiteDatabase db = getHelper().getWritableDatabase();
Cursor cursor = db.rawQuery("PRAGMA journal_mode = WAL;", null);
只有这样才有效

有关此问题的其他信息:

  • 我有两个HTC Sensation,都更新到了ICS,所以升级到了4.0.3
  • 但是软件数量是不同的!!(3.33.401.53和3.33.401.6),并且设备上没有可用的更新(这很奇怪)。我真的不明白发生了什么,也许他们在构建之间更改了默认日志模式

所以,如果您有experince slow数据库函数,请检查db上的第一个日志模式。谢谢格雷,谢谢你的帮助

所以createOrUpdate速度很慢,但create的速度是相同的?这是在设备上运行还是在模拟器中运行?createOrUpdate和create之间没有速度差异。所有这些结果都来自真实设备…我检查了两台设备上的数据库,差异在于日志模式。在2.3.4 wal和ICS上(更新后)截断。我几乎可以肯定,日志模式会导致性能下降。不,我正在试图找到如何在ormlite中更改的方法。所以createOrUpdate很慢,但create的速度相同?这是在设备上运行还是在模拟器中运行?createOrUpdate和create之间没有速度差异。所有这些结果都来自真实设备…我检查了两个设备上的数据库,差异是日志模式。在2.3.4 wal和ICS上(更新后)截断。我几乎可以肯定,日志模式会导致性能下降。不,我正在试图找到在ormlite中如何改变的方法。我的答案没有回答你的问题有什么原因吗?不管怎样,你都应该接受其中一个。我的回答没有回答你的问题有什么原因吗?无论哪种方式,您都应该接受其中一种。