[英]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.