4

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

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

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

有没有办法加快这个速度?

4

1 回答 1

8

对 Android 领域的深入研究表明,由于采用了粗略的Method.equals()方法,Android 下的注解非常缓慢并且非常GC 密集。我们在 4.26 版本中添加了表配置文件,绕过了这一点,使 ORMLite 启动得更快、更快。请参阅邮件列表上的这个问题这个线程。

我们继续提高注释速度。另请参阅:ORMLite 在 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 的内存审计可能也是需要的。很久没看消费了。

于 2011-03-25T12:59:56.587 回答