gpt4 book ai didi

android - 由于频繁更新, Realm 大数据库大小

转载 作者:行者123 更新时间:2023-11-29 17:14:11 26 4
gpt4 key购买 nike

我有一个线程每秒运行一次,每秒更新 Realm 数据库字段。虽然正在更新的数据很小,但我发现更新仍然会增加数据库文件的大小,直到您使用 Realm.compressRealm() 明确清理它,所以在一两个小时内数据库大小为 50MB+ 并且也会在短时间内轻松膨胀到 750MB 以上。

我在 Activity onStop() 中使用 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 的地方,也是我唯一如此频繁更新的地方,所以我假设“泄漏”来自这里,尽管我不能确定。无论应用程序是否可见,文件大小都会逐渐增加,但只有在它运行时才会增加。

这是另一个有类似问题的用户: App size increase due to realm android

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

感谢任何意见,谢谢!

最佳答案

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

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

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

drealm.close();

关于android - 由于频繁更新, Realm 大数据库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com