好的,所以我现在已经把头撞到墙上好几天了,我终于得出结论了。
我正在尝试仅在需要时插入一条记录,我的响应时间非常慢,每条记录大约120毫秒。我已经在SO上看到了关于优化插入语句的大部分线程,并且我实现了大多数推荐的实践;使用事务,使用预准备语句等。
记录和测试向我展示了大部分延迟来自基本步骤" databaseHelper.getWritableDatabase()"获得可写数据库需要大约90ms。
这个问题有没有可接受的解决方案?
这是我插入的方法:
public static void insertEBlago3(Context context, EItemInvoiceDto itemDto, EParamDto eparamDto) throws Exception {
long startTime = System.currentTimeMillis();
DatabaseHelper databaseHelper = new DatabaseHelper(context);
SQLiteDatabase database = null;
try {
Log.v("Dodaj", "get writable database " + (System.currentTimeMillis() - startTime));
database = databaseHelper.getWritableDatabase();
// Begin transaction.
Log.v("Dodaj", "begin transaction " + (System.currentTimeMillis() - startTime));
database.beginTransaction();
Log.v("Dodaj", "Preparing sql " + (System.currentTimeMillis() - startTime));
String sqlInsertEBlago3 = "INSERT INTO emaloprod3 (leto, gd, strmst, zaporedna, datdok, casdok, idlokacije, blago, kolicina, "
+ "osnova, cena, ddv, popust, ncena, rabat, marza, narocilo, naroc, naroc_kol, opomba) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
Log.v("Dodaj", "Before compile " + (System.currentTimeMillis() - startTime));
SQLiteStatement stat = database.compileStatement(sqlInsertEBlago3);
Log.v("Dodaj", "After compile " + (System.currentTimeMillis() - startTime));
/***binding data****/
// End transaction.
stat.executeInsert();
Log.v("Dodaj", "Insert " + (System.currentTimeMillis() - startTime));
database.setTransactionSuccessful();
} catch (Exception e) {
throw e;
// Log.e(TAG, e.getMessage(), e);
// e.printStackTrace();
} finally {
// End transaction.
database.endTransaction();
DBHelper.closeAllConnections(null, null, database);
Log.v("Dodaj", "Finish " + (System.currentTimeMillis() - startTime));
}
}
这是我的日志:
10-21 10:12:27.278 3759-3759/? V/Dodaj: get writable database 0
10-21 10:12:27.370 3759-3759/? V/Dodaj: begin transaction 92
10-21 10:12:27.370 3759-3759/? V/Dodaj: Preparing sql 92
10-21 10:12:27.370 3759-3759/? V/Dodaj: Before compile 92
10-21 10:12:27.370 3759-3759/? V/Dodaj: After compile 92
10-21 10:12:27.384 3759-3759/? V/Dodaj: Insert 106
10-21 10:12:27.399 3759-3759/? V/Dodaj: Finish 121
正如您所看到的,可写数据库需要92毫秒