Java Android在房间数据库中插入大量数据

Java Android在房间数据库中插入大量数据,java,android,performance,android-studio,android-room,Java,Android,Performance,Android Studio,Android Room,我有大约10个模型,每个模型都有超过120K行和90列的记录,其中包含双数组值。在室内插入任何一个模型都需要125-130秒以上的时间。有谁能建议我需要做些什么,以节省所有这些120K与一些批量插入技术,大约需要1或2秒。获取任何范围的记录都是平滑的,并且返回的子列表在可承受的时间内(不到一秒钟)。下面是我目前正在使用的DAO和存储库方法 刀看起来像这样 @Transaction @Insert(onConflict = OnConflictStrategy.IGNORE) // IGNORE/

我有大约10个模型,每个模型都有超过120K行和90列的记录,其中包含双数组值。在室内插入任何一个模型都需要125-130秒以上的时间。有谁能建议我需要做些什么,以节省所有这些120K与一些批量插入技术,大约需要1或2秒。获取任何范围的记录都是平滑的,并且返回的子列表在可承受的时间内(不到一秒钟)。下面是我目前正在使用的DAO和存储库方法

刀看起来像这样

@Transaction
@Insert(onConflict = OnConflictStrategy.IGNORE) // IGNORE/REPLACE has no effect (just to clear out things)
void insertAllDynStabRecord(List<DynStab> dynStabList);
存储库方法第二种方法

private static class WriteDynStabRecords extends AsyncTask<List<DynStab>, Void, Void> {
    private PDDao pdDao;

    private WriteDynStabRecords(PDDao pdDao) {
        this.pdDao = pdDao;
    }

    @Override
    protected Void doInBackground(List<DynStab>... dynStabList) {
        pdDao.insertAllDynStabRecords(dynStabList[ 0 ]); 
        return null;
    }
}
私有静态类WriteDynStabRecords扩展异步任务{
私有PDDao PDDao;
私有WriteDynStabRecords(PDDao PDDao){
this.pdDao=pdDao;
}
@凌驾
受保护的Void doInBackground(列表…动态列表){
pdDao.insertAllDynStabRecords(dynStabList[0]);
返回null;
}
}

这两种方法都需要120秒以上的时间来写入大约120K条记录。我做错了什么,或者在ROOM数据库中插入批量数据的最佳和最快的方法是什么。

不知道这篇文章发表后发生了多少变化,但可能是Android ROOM与原始sqlite批量插入语句相比仍然非常慢。你找到解决方案了吗?我甚至面临着同样的问题。@kavitha,我使用inserAll方法插入列表而不是单个记录。
private static class WriteDynStabRecords extends AsyncTask<List<DynStab>, Void, Void> {
    private PDDao pdDao;

    private WriteDynStabRecords(PDDao pdDao) {
        this.pdDao = pdDao;
    }

    @Override
    protected Void doInBackground(List<DynStab>... dynStabList) {
        pdDao.insertAllDynStabRecords(dynStabList[ 0 ]); 
        return null;
    }
}