|
最近在项目遇到了一个这样的问题: 向服务器请求了主要城市的数据,服务器返回有1030个城市,要在本地做缓存,而且是在第一次进入应用的时候就要初始化好,当异步插入android-Sqlite 1030条数据需要24.093-25.04s之间(是在三星GT-I9308)。这样就会在用户第一次进入的应用的下载城市列表和缓存在本地数据的耗时相当长,用户体验肯定是相当的垃圾,只有优化,网络优化不详说,只是分享下,数据库方面的。我的做法就是给着插入1030 的数据库架上事务,整体插入时间减小到 0.7s左右,事务对于多条插入有很大的优化效果。具体代码如下:
long currentTimeMillis=0;
try{ currentTimeMillis=System.currentTimeMillis(); db.beginTransaction(); for(CityInfo cityInfo :AllCityInfoList){ Log.i("ctiyInfo", size+cityInfo.StationName+i); db.execSQL( "insert into AllCity(AllCityCode,AllCityName,AllCityQuanPing,AllCityShouZiMu) values(?,?,?,?)", new String[] { cityInfo.StationCode,cityInfo.StationName,cityInfo.StationPinYin, "" });// } db.setTransactionSuccessful();//这句一定要存在,这个表示执行成功,提交,不然会回滚。
}catch (Exception e) {//异常捕获, // TODO }finally{
db.endTransaction(); db.close(); dbOpenHelpers.close();
}
|