Android contentprovider insert需要很多时间
我制作了自己的contentprovider,通过多次插入一次放入大量数据 该应用程序将从外部来源接收数据,目前我收到大约30个项目(因此插入30次) 现在我注意到这需要很多宝贵的时间(大约3秒,每次插入100毫秒) 如何提高contentprovider的速度?我已经尝试将它们全部插入到一起,但这将需要5秒钟Android contentprovider insert需要很多时间,android,sql,insert,android-contentprovider,Android,Sql,Insert,Android Contentprovider,我制作了自己的contentprovider,通过多次插入一次放入大量数据 该应用程序将从外部来源接收数据,目前我收到大约30个项目(因此插入30次) 现在我注意到这需要很多宝贵的时间(大约3秒,每次插入100毫秒) 如何提高contentprovider的速度?我已经尝试将它们全部插入到一起,但这将需要5秒钟 提前感谢。将insertBulk中的所有内容包装到事务中 例如: SQLiteDatabase sqlDB = mDB.getWritableDatabase(); sq
提前感谢。将
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();
}
SQLiteDatabase sqlDB=mDB.getWritableDatabase();
sqlDB.beginTransaction();
试一试{
对于(ContentValues cv:values){
long newID=sqlDB.insertOrThrow(table,null,cv);
if(newID在事务中进行插入大大提高了速度,因为只对实际数据库进行了一次写入:
db.beginTransaction();
try {
// do the inserts
db.setTransactionSuccessful()
} finally {
db.endTransaction();
}
我曾经尝试提高大约2000次写入的写入速度,这是我发现的唯一大的改进
正在执行db.setLockingEnabled(false)
我认为它提高了1%左右,但是你还必须确保没有其他线程写入数据库。如果表很大,删除冗余索引也可以稍微提高性能。在这个完全正常工作的示例中,查询Uri
,以提供合适的表
变量。谢谢,这真的解决了它!取而代之的是3秒,它以110毫秒插入。不客气。该示例实际上来自我的一段代码。:-)如果您使用Android 2.1或更低版本的内容提供商,不要期望在不到1秒或2秒的时间内完成批量插入(即使使用事务)。SQLite实现非常慢。谢谢,但我使用的是2.2。所以这应该没问题。有时问题可能是insert语句。若要检查是否可以使用SQLite浏览器,请在那里打开数据库并执行相同的insert语句,无论在那里是否花费时间?感谢您的快速响应。