繁体   English   中英

由于频繁更新,领域大数据库大小

[英]Realm large db size due to frequent updates

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

我正在使用Activity onStop() realm.close()中的realm.close()关闭Realm,并关闭我在计时器线程中创建的新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的唯一地方,也是我更新频率的唯一地方,所以我假设“泄漏”来自这里虽然我不能确定。 文件大小爬上应用程序可见或不可见,但仅在它运行时。

这是另一个有类似问题的用户: 由于领域机器人的应用程序大小增加

如果这被认为是解决方案,我找不到调用Realm.compressRealm()的正确方法,因为db应该在你使用它时每秒更新一次,而且我只能关闭Realm onDestroy()而不是onStop() (和Realm.compressRealm()要求你关闭所有领域)

我感谢任何意见,谢谢!

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

基于上面的示例,我建议使用realm提供的executeTransaction方法(而不是开始/提交事务):

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

drealm.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM