作數據同步時遇到一個問題,在下載數據時須要批量的向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