【问题标题】:Why is the DAO method so slow in ORMLite?为什么 ORMLite 中的 DAO 方法这么慢?
【发布时间】:2011-03-24 18:41:17
【问题描述】:

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

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

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

有没有办法加快速度?

【问题讨论】:

  • 这个调用返回什么?数以千计的对象来自数据库?在这种情况下,您应该限制从数据库加载的数据量。
  • @Gamlor 此调用返回一个 DAO 对象,该对象将作用于给定模型以执行各种数据库任务,例如插入、更新、查询等......
  • 嘿@Pzanno。我在下面更新了我的回复,说明了createDao 在 Android 下如此缓慢的真正原因。
  • @Gray,感谢您的更新。我很高兴你能找到这个问题的根源。我会密切关注它并希望得到修复。

标签: java performance garbage-collection ormlite


【解决方案1】:

对 Android 领域的深入研究表明,由于粗略的 Method.equals() 方法,Android 下的注释非常缓慢并且非常 GC 密集。我们在 4.26 版本中添加了表配置文件,绕过了这一点,使 ORMLite 启动得更快、更快。请参阅邮件列表中的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 的内存审计可能也是需要的。好久没看消耗了。

【讨论】:

  • @Gray 谢谢!现在在您的示例中,您还将自己的 dao 缓存为类的私有成员。既然您说 DaoManager 会为您缓存它,是否需要这样做?
  • @Gray 另外,如果最好自己缓存,您是否建议将其设为静态变量?还是会消耗太多内存?
  • @Gray 我刚刚从 4.16 测试了新的 DaoManager 类,我不能说我注意到它应该做的缓存。同样在我的 Android 日志中,我在使用 TableUtils 类创建表期间打印出一堆 03-25 15:21:33.022: INFO/dalvikvm(8157): Could not find method java.sql.SQLException.&lt;init&gt;, referenced from method com.j256.ormlite.dao.DaoManager.createDao
  • 静态没问题。 DaoManager 将缓存它,但每次查找它时都必须创建一个键对象,因此将其保存在本地变量中会更有效一些。如果你不止一次地创造道,你只会注意到它。不确定为什么找不到 SQLException 类。
  • 当我们偶然使用一些 java 1.6 调用时,这被证明是 4.16 中的一个错误。 4.17 修复了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多