【问题标题】:Android ORMLite slow create objectAndroid ORMLite 缓慢创建对象
【发布时间】:2013-05-25 11:44:12
【问题描述】:

我正在使用 ormLite 在设备上存储数据。 我不明白为什么,但是当我存储大约 100 个对象时,其中一些对象存储时间太长,最多可达秒。 这是代码

来自数据库管理器:

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个对象需要一秒钟?或者他们中的一些人都需要一秒钟?
  • 不,大多数物品可以节省 10-20-30 毫秒,但很少(3-5 件)可以节省 300-1000 毫秒。
  • DAO 创建是最昂贵的部分,因此第一个可能比其他的花费更多的时间。但除非数据有一些差异,否则我无法解释为什么 100 个湖中的几个条目要长 10 倍。
  • 我想这不是正确的方法,但目前我通过将此操作提取到单独的线程来解决问题。我用相同的数据集尝试了几次,每次都是不同的对象,所以它不依赖于对象。

标签: android ormlite performance


【解决方案1】:

感谢格雷! 正如 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 documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多