Android contentprovider insert需要很多时间

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

我制作了自己的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();
    }
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语句,无论在那里是否花费时间?感谢您的快速响应。