我制作了自己的contentprovider,通过多次插入,一次放入了大量数据。
应用程序将从外部源接收数据,此时我将收到大约30个项目(因此每次插入30次)。
现在我注意到这需要很多宝贵的时间(大约3秒,每次插入100毫秒)。
如何提高contentprovider的速度?我已经试着把它们都塞进大包里了,但最多需要5秒钟。
提前谢谢。
最佳答案
将insertBulk
中的所有内容打包到事务中。
例子:
SQLiteDatabase sqlDB = mDB.getWritableDatabase();
sqlDB.beginTransaction();
try {
for (ContentValues cv : values) {
long newID = sqlDB.insertOrThrow(table, null, cv);
if (newID <= 0) {
throw new SQLException("Failed to insert row into " + uri);
}
}
sqlDB.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(uri, null);
numInserted = values.length;
} finally {
sqlDB.endTransaction();
}
bulkInsert
默认情况下不使用事务,因为默认行为只调用insert
:重写此项以处理插入一组新行的请求,否则默认实现将遍历这些值并对每个值调用insert(uri,contentvalues)。