作数据同步时遇到一个问题,在下载数据时须要批量的向sqlite插入数据,虽然数据不算多,可是实际测试中每插入一条数据须要将近50ms的时间,这意味着1000条数据就须要花费50s左右的时间,对于用户来讲,体验太差了,必需要优化。sql
在sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操做。明白了这个,解决方案就有了,在批量插入数据的时候,只开启一个事务,这样只会进行一次磁盘操做,代码以下:
性能
db.beginTransaction();测试
try {优化
for (...) {spa
db.execSQL("...", new Object[]{});sqlite
}事务
db.setTransactionSuccessful();同步
} catch (Exception e) {it
} finally {io
db.endTransaction();
}
使用事务后性能有明显的提高,以批量操做100条为例,由原来的5s优化成了如今的1s