好吧,所以我一直在我的头靠墙撞了几天现在,我终于得出结论。Sqlite获取数据库方法缓慢
我想插入一个记录,只有当我需要时,我的响应时间非常缓慢,每个记录约120ms。我已经看到了关于优化插入语句的大部分线程,并且我实现了大多数推荐的实践;使用事务处理,使用预处理语句等。
日志记录和测试表明,大部分延迟来自基本步骤“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毫秒
非常弱的基准...你需要明白,你正在阅读的所有thos最优化是为**多个**行插入... – Selvin
我知道,我基本上都在尝试让事情更快。 – gregaj
然后看看@王杰的回答... – Selvin