您好,我想知道在 Android 上哪种方法更快。
我有一个处理数千行的循环,我认为该SQLiteDatabase.insert()
方法会影响性能。
在插入方法中,我放置了一个参数,contentvalues
我认为在后台该方法必须有一个过程来检查每个contentvalue
并构建查询。
相反,在该execSQL
方法中,我将整个查询作为参数,我认为该方法不必执行太多操作即可执行它。
我不知道我是否正确,我认为这execSQL
比插入大量数据要好,但我不确定......
好吧,我试过了,它们之间有一点区别...... execSQL 更快,但很难注意到它。
然而,我真正的问题是我没有使用交易。由于 sqlite 没有服务器来控制对数据的访问,因此每次插入时,sqlite 都必须关闭并重新打开物理文件。因此,如果您在循环中有一千个插入并且没有事务,它将执行一千个事务。在我的测试中,一千次插入持续了 11 秒而不使用事务,而使用事务只持续了 1 秒。
很可能你不会看到任何区别。大部分时间都花在将数据实际写入数据库中,查询生成是相当简单的一步。如果您想自己查看差异,我建议您使用两种方式对插入进行计时。