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

Pza*_*nno 4 java performance garbage-collection ormlite

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

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

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

有没有办法加快速度?

Gra*_*ray 8

对Android-land的深入研究表明,由于一种粗略的Method.equals()方法,Android下的注释非常缓慢且极其 GC密集.我们在版本4.26中添加了表配置文件,绕过了这个并使ORM​​Lite启动得更快,更快.在邮件列表中查看此问题此主题.

我们继续提高注释速度.另请参阅:Android上的ORMLite性能不佳?


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;
}
Run Code Online (Sandbox Code Playgroud)

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