微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objectbox DbMaxReadersExceededException

如何解决objectbox DbMaxReadersExceededException

ObjectBox 2.7.1 版, MaxnumReaders 500, @Entity 超过 50 个, 一些实体有超过 10 万行。 发布两周后,我们开始在 Sentry 中出现错误:无法开始读取事务(已达到最大读取事务) 如何使用调试器在早期阶段诊断问题?

解决方法

当您遇到 DbMaxReadersExceededException 时,您通常可以通过检查以下选项来解决问题:

  1. 因为您已经增加了最大读者值,所以我假设您使用了多个线程。我要做的第一件事是验证您的线程逻辑。我们已经看到应用程序无限制地产生线程并因此破坏读者的情况。每个线程在访问 ObjectBox DB 时都需要一个 reader。因此,获得 DbMaxReadersExceededException 可能是线程代码中存在问题的征兆。

  2. 如果您有很多短期线程,您可能会看到类似“W/Box:Skipping low-level close for read-only cursor (non-creator thread)”之类的日志”或“提示:使用 closeThreadResources() 来避免完成回收事务”。后一个提示正是您在线程退出之前应该做的事情。如果你只使用了一个或两个 Boxes,你可以调用 box 上的方法:box.closeThreadResources(),否则 BoxStore 还提供一个同名的方法来为所有 Boxes 执行此操作。

  3. 目前还有 an open issue 与未绑定线程池相关。如果遇到这种情况,当前的解决方法是使用具有上限的线程池。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。