由于频繁更新,导致数据库大小过大

ng

我每秒运行一个线程,该线程每秒更新一次Realm数据库字段。尽管要更新的数据很小,但我发现更新仍然会增加数据库文件大小,直到您使用明确清除它为止,Realm.compressRealm()因此一两个小时内数据库大小为50MB +,并且很容易在短时间内膨胀到750MB +。 。

我将realm.close()在Activity中关闭RealmonStop()并关闭我在计时器线程中创建的新Realm实例:

public void checkDealersTimer() {
    RealmResults<Dealers> dealersLookup = realm.where(Dealers.class).equalTo("thedealers","thedealers").findAll();
    dlr = dealersLookup.get(0);

    if (dlr.getPerSecond() != 0.00) {
        if (dealerTimer == null) {
            dealerTimer = new Timer();
            dealerTimer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    Realm drealm;
                    drealm = Realm.getDefaultInstance();

                    RealmResults<Dealers> dealersLookup = drealm.where(Dealers.class).equalTo("thedealers","thedealers").findAll();
                    dlr = dealersLookup.get(0);

                    drealm.beginTransaction();
                    dlr.setEarnings(dlr.getEarnings()+dlr.getPerSecond());
                    drealm.commitTransaction();
                    drealm.close();
                }
            }, 0, 1000);

        }
    }
}

该计时器是我在UI线程之外使用Realm的唯一位置,也是我进行如此频繁的更新的唯一位置,因此尽管无法确定,但我假设“泄漏”来自此处。无论应用程序是否可见,文件大小都会逐渐增加,但仅限于运行时。

这是另一个存在类似问题的用户:由于领域Android,应用程序大小增加

如果这被认为是解决方案,我无法找到正确的方法来调用Realm.compressRealm(),因为该数据库应该是当你使用它来更新每一秒,我只能关闭的境界onDestroy()不是onStop()(并且Realm.compressRealm()要求你关闭所有国度)

感谢您的投入,谢谢!

奇数计

我遇到了一个问题,即我的领域文件大小以惊人的速度增加,这是close()在开发过程中应用程序意外关闭时不调用的问题因此,我的数据库文件(其中只有大约1k项)为10MB。适当关闭我的领域实例可以解决此问题,并将数据库文件大小减少到〜300KB。确实,值得检查整个代码库,以确保您实际上关闭了所有领域实例。这很烦人,但是比让用户抱怨存储空间不足要好;)

根据上面的示例,我还建议您使用领域提供的executeTransaction方法(而不是开始/提交事务):

drealm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        dlr.setEarnings(dlr.getEarnings() + dlr.getPerSecond());
    }
});

drealm.close();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

由于服务器启动时 ecache 请求负载过大导致数据库服务器停顿

来自分类Dev

差异备份大小过大

来自分类Dev

图片过多,应用大小过大

来自分类Dev

SQLite数据库更新导致错误

来自分类Dev

由于字符(')而导致的数据库插入麻烦

来自分类Dev

由于查询导致数据库插入错误

来自分类Dev

由于更改而更新数据库中的现有记录?

来自分类Dev

带有Boost Asio和SSL的消息大小过大

来自分类Dev

Kafka-经纪人:邮件大小过大

来自分类Dev

分配分支条件大小过大

来自分类Dev

滚动时的Android文字大小过大

来自分类Dev

由于数据库是只读的,因此无法更新数据库

来自分类Dev

更新sqlite数据库并使用SimpleCursorAdapter导致UI挂起

来自分类Dev

由于Configurations.PHP文件而导致数据库错误,无法访问网站

来自分类Dev

由于找不到列,导致会议室数据库崩溃

来自分类Dev

由于添加了数据库连接,导致Grails运行App错误

来自分类Dev

如何运行SQL Developer由于其大小而无法打开的数据库导出脚本

来自分类Dev

非程序员如何处理对SQL数据库的频繁批量更新。数据库是否应该每次都从Excel导入?

来自分类Dev

频繁数据库查询即时消息

来自分类Dev

在SQLite数据库中获取最频繁的项目

来自分类Dev

Umbraco 数据库大小

来自分类Dev

按组大小过滤数据框

来自分类Dev

由于存在未决的更改,因此无法更新数据库以匹配当前模型

来自分类Dev

表单区域textarea由于特殊字符未更新到数据库

来自分类Dev

在ADO中使用“最大数据库大小”选项导致“打开”命令抛出

来自分类Dev

在GCP中创建IAM成员会引发错误策略大小过大

来自分类Dev

图片大小过大时,Qt openGL es2 glBindTexture失败

来自分类Dev

在django中填充数据库并在视图中检索值会由于ForeignKey导致错误?

来自分类Dev

由于在另一个数据库中调用用户定义的函数而导致性能损失

Related 相关文章

  1. 1

    由于服务器启动时 ecache 请求负载过大导致数据库服务器停顿

  2. 2

    差异备份大小过大

  3. 3

    图片过多,应用大小过大

  4. 4

    SQLite数据库更新导致错误

  5. 5

    由于字符(')而导致的数据库插入麻烦

  6. 6

    由于查询导致数据库插入错误

  7. 7

    由于更改而更新数据库中的现有记录?

  8. 8

    带有Boost Asio和SSL的消息大小过大

  9. 9

    Kafka-经纪人:邮件大小过大

  10. 10

    分配分支条件大小过大

  11. 11

    滚动时的Android文字大小过大

  12. 12

    由于数据库是只读的,因此无法更新数据库

  13. 13

    更新sqlite数据库并使用SimpleCursorAdapter导致UI挂起

  14. 14

    由于Configurations.PHP文件而导致数据库错误,无法访问网站

  15. 15

    由于找不到列,导致会议室数据库崩溃

  16. 16

    由于添加了数据库连接,导致Grails运行App错误

  17. 17

    如何运行SQL Developer由于其大小而无法打开的数据库导出脚本

  18. 18

    非程序员如何处理对SQL数据库的频繁批量更新。数据库是否应该每次都从Excel导入?

  19. 19

    频繁数据库查询即时消息

  20. 20

    在SQLite数据库中获取最频繁的项目

  21. 21

    Umbraco 数据库大小

  22. 22

    按组大小过滤数据框

  23. 23

    由于存在未决的更改,因此无法更新数据库以匹配当前模型

  24. 24

    表单区域textarea由于特殊字符未更新到数据库

  25. 25

    在ADO中使用“最大数据库大小”选项导致“打开”命令抛出

  26. 26

    在GCP中创建IAM成员会引发错误策略大小过大

  27. 27

    图片大小过大时,Qt openGL es2 glBindTexture失败

  28. 28

    在django中填充数据库并在视图中检索值会由于ForeignKey导致错误?

  29. 29

    由于在另一个数据库中调用用户定义的函数而导致性能损失

热门标签

归档