为什么DAO方法在ORMLite中这么慢?

时间:2011-03-24 18:41:17

标签: java performance garbage-collection ormlite

我有一个看起来像这样的方法

public Dao<ModelStore, Integer> getDaoStore() throws SQLException {
    return BaseDaoImpl.createDao(getConnectionSource(), ModelStore.class);
}

当我致电getDaoStore时,这是一个漫长的过程。在我的日志中,我可以看到GC在每次调用之后运行,所以我猜这次调用会有很多事情发生。

有没有办法加快速度?

1 个答案:

答案 0 :(得分:8)

对Android-land的深入研究表明,由于采用了粗略的Method.equals()方法,Android下的注释非常缓慢且非常 GC密集型。我们在版本4.26中添加了表配置文件,绕过了这个并使ORM​​Lite启动得更快,更快。请参阅邮件列表中的this questionthis thread

我们继续提高注释速度。另见:ORMLite poor performance on Android?


DAO创建是一个相对昂贵的过程。 ORMLite创建类中的类和字段的数据表示,并构建许多其他实用程序类,以帮助实现各种DAO功能。您应确保每次调用时调用createDao方法一次。我认为这是在Android @Pzanno?

在4.16中,我们添加了一个DaoManager,它的作用是缓存Dao类,这在版本4.20中得到了改进。然后,您应该始终使用它来创建您的Daos。建议使用以下代码:

private Dao<ModelStore, Integer> modelStoreDao = null;
...

public Dao<ModelStore, Integer> getDaoStore() throws SQLException {
    if (modelStoreDao == null) {
        modelStoreDao = DaoManager.createDao(getConnectionSource(),
            ModelStore.class);
    }
    return modelStoreDao;
}

希望这会有所帮助。 ORMLite的内存审计也可能是有序的。我看了它的消费已经有一段时间了。