Android ORMLite 创建对象速度慢

4

我正在使用ormLite来在设备上存储数据。 我不明白为什么,但当我存储大约100个对象时,其中一些对象存储时间过长,甚至达到了一秒钟。 以下是代码:

来自DatabaseManager的代码:

public class DatabaseManager 
    public void addSomeObject(SomeObject object) {
        try {
            getHelper().getSomeObjectDao().create(object);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

    public Dao<SomeObject, Integer> getSomeObjectDao() {
        if (null == someObjectDao) {
            try {
                someObjectDao = getDao(SomeObject.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return someObjectDao;
    }

有什么想法可以避免这种情况吗?

你是说插入100个对象只需要一秒钟?还是其中一些每个需要一秒钟? - Gray
可能是 https://dev59.com/QGbWa4cB1Zd3GeqPacps 的重复问题。 - Gray
不,大多数项目保存在10-20-30毫秒内,但是有少数项目(3-5个)需要300-1000毫秒。 - Aleksandr
DAO的创建是最昂贵的部分,因此第一个可能比其他部分需要更多的时间。但除非数据有所不同,否则我无法解释为什么100个条目中的几个条目需要花费10倍的时间。 - Gray
我猜这不是正确的方法,但目前我通过将此操作提取到单独的线程中来解决了这个问题。 我尝试了几次相同的数据集,每次使用的是不同的对象,因此它不依赖于对象。 - Aleksandr
1个回答

11

感谢 Gray! 解决方案是,如Gray所述,使用 callBatchTasks 方法:

public void updateListOfObjects (final List <Object> list) {
    try {
        getHelper().getObjectDao().callBatchTasks(new Callable<Object> (){
        @Override
        public Object call() throws Exception {
            for (Object obj : list){
                getHelper().getObjectDao().createOrUpdate(obj);
                }
            return null;
        }

    });
} catch (Exception e) {
    Log.d(TAG, "updateListOfObjects. Exception " + e.toString());
}
}

使用这种方式,我的对象(两种类型的对象,第一种类型约有100个项目,第二种类型约有150个项目)存储需要1.7秒。

请参阅ORMLite文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接