jsk*_*dd3 1 java sqlite android
public synchronized void updateStop(ArrayList<StopBean> beanList){
SQLiteDatabase db = getWritableDatabase();
String query = "DELETE FROM 'stop'";
db.execSQL(query);
for(StopBean bean : beanList){
String atco_code = bean.getAtco_code();
String name = bean.getName();
String locality = bean.getLocality();
String bearing = bean.getBearing();
String latitude = bean.getLatitude()+"";
String longitude = bean.getLongitude()+"";
ContentValues values = new ContentValues();
values.put("atco_code", atco_code);
values.put("name", name);
values.put("locality", locality);
values.put("bearing", bearing);
values.put("latitude", latitude);
values.put("longitude", longitude);
db.insert("stop", null, values);
}
db.close();
}
Run Code Online (Sandbox Code Playgroud)
目前,我们的应用程序通过上述方法插入4,000行.这种方法的问题是实际执行需要10-15秒.显然,这对于简单的4,000行插入来说太长了.
如何更改此方法以便大大加快这些插入的执行时间?
总结整个事情在交易,使用beginTransaction(),endTransaction()和markTransactionAsSuccessful().现在,您每个插入执行一个事务,这意味着每个插入一个磁盘I/O脉冲,这将非常慢.
除此之外:
不要ContentValues在循环的每次传递中分配新的
摆脱局部变量(例如atco_code),以防它们没有被优化掉
使用更有效的方法将数字转换为字符串而不是""(例如, Double.toString()
尝试将一个普通的SQL INSERT语句编译到一个SQLiteStatement viacompileStatement(),看看它是否比调用更好insert()
如果您仍然不满意,请使用Traceview并确定剩余时间用于何处.
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |