android - 删除 Realm 数据库对象,但即使所有对象都为空, Realm 文件大小保持不变。随着时间的推移变得太大了

标签 android database realm storage realm-mobile-platform

我有一个在我的应用程序中使用的 Realm 数据库。 文件大小为 7mb。它里面有不同的物体。 但后来我调用这个函数:

 public static void deleteRealm(Context context) {
    Realm realm = PSApplicationClass.getInstance().getRealm();
    try {
        Log.i("", "realm start");
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
                realm.delete(Destination.class);
                realm.delete(TripStep.class);
                realm.delete(TripStop.class);
                realm.delete(Route.class);
                realm.delete(RealmLocation.class);
                realm.delete(CoordLocation.class);
                realm.delete(PSTrip.class);
                realm.delete(PSUser.class);
                realm.delete(UserVehicle.class);
                realm.delete(Vehicle.class);
                realm.delete(MileageRates.class);
                realm.delete(PSUserActivityMonth.class);
                realm.delete(PSUserActivityWeek.class);
                realm.delete(PSUserActivityYear.class);
                realm.delete(Activity.class);
                realm.delete(PSTripsStats.class);
                realm.delete(Report.class);
                realm.delete(Setting.class);
                realm.delete(AddressComponent.class);
                realm.delete(RealmString.class);
                realm.delete(RealmInt.class);
                realm.deleteAll();
            }
        });
        Log.i("", "realm end");
    } catch (Exception e) {
        Log.i("", "realm continue initTrip error trying to add to realm:" + e.getMessage());
        if (realm.isInTransaction()) {
            realm.cancelTransaction();
        }
    }
}

然后我再次检查。该文件仍有 7 MB,但它是空的。里面没有 Realm 对象。 更甚者,如果我再次获取相同的数据,它会增长到 14MB,所以当我删除数据时,它会空出 14MB,然后增长到 21... 等等。这导致它成为一个巨大的文件。而且我很确定这不应该发生。为什么 realm 这样做? 这是我正在谈论的文件: https://www.dropbox.com/s/ri95yiwjutjiki6/myrealm.realm?dl=0

最佳答案

来自 Realm FAQ ,这是可以预料的,数据库最终会重用该空间。

也就是说,您可以通过调用 Realm#compactRealm(RealmConfiguration) 来强制进行数据库压缩。参见 documentation .

关于android - 删除 Realm 数据库对象,但即使所有对象都为空, Realm 文件大小保持不变。随着时间的推移变得太大了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47872501/

相关文章:

php - 从 PHP 数组制作 HTML 列表?

php - 优化查询性能

mysql - 重置自动增量有什么坏处吗?

ios - 查询包含字符串值列表的几个字段(Realm Swift)

android - 未找到 SDK 位置。 ANDROID_HOME - 在 MAC 上的 eclipse 中构建一个 gradle 项目

Android 签名的应用程序崩溃。在标志之前工作

Android 致命异常 ActivityNotFoundException

android - ListAdapter submitList 未更新

ios - Realm swift : Realm Build Errors After Linking

swift - Realm 写入阻塞主线程