这是我编写的用于测试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/

10-09 07:28