这是我编写的用于测试compactRealm功能的简单测试代码。
private void compactRealmTest(int count){
Realm realm = Realm.getDefaultInstance();
for(int i=0;i<count;++i) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Person p = Person.getRandomPerson();
realm.copyToRealm(p);
}
});
final RealmResults<Person> personList = realm.where(Person.class).findAll();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
int size = personList.size();
for(int i=0;i<size;++i){
personList.deleteFirstFromRealm();
}
}
});
}
realm.close();
}
该函数将插入一个对象,并立即从Realm中删除该对象。此功能结束后,领域db将不包含任何对象。我观察到,即使执行此功能后没有对象,领域文件的大小也变为〜4.5MB(在调用
compactRealmTest(1000)
之后)。我决定通过调用compactRealm()
函数来压缩领域。文件大小从〜4.5MB减少到3.5MB。为什么即使领域中没有任何对象,领域仍然使用3.5MB? 最佳答案
Realm当前不会自动回收磁盘上的空间,而是在需要时重新使用空间。这意味着,如果再次添加对象,那么文件大小也不会增加。
如果要最小化磁盘上文件的大小,可以使用Realm.compactRealm(config)
:https://realm.io/docs/java/latest/api/io/realm/Realm.html#compactRealm-io.realm.RealmConfiguration-
关于java - Realm Android:compactRealm无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38102439/