我正在尝试将Realm集成到我的项目中,并注意到一个问题。我已经看到其他帖子,但他们是一年多一点,并已解决..领域文件大小太大
当添加对象到领域,东西是文件。但是在删除对象时,它们会从数据库中删除,但文件大小仍然很大。如果我在TextEdit中打开领域文件,则可以看到旧记录的原始文本。为什么他们没有被完全删除?
看看这个截图。 Realm DB中的零个文件,但文件大小为23 MB。
谢谢。
我正在尝试将Realm集成到我的项目中,并注意到一个问题。我已经看到其他帖子,但他们是一年多一点,并已解决..领域文件大小太大
当添加对象到领域,东西是文件。但是在删除对象时,它们会从数据库中删除,但文件大小仍然很大。如果我在TextEdit中打开领域文件,则可以看到旧记录的原始文本。为什么他们没有被完全删除?
看看这个截图。 Realm DB中的零个文件,但文件大小为23 MB。
谢谢。
为bcamur伤心,
境界文件将保持其在磁盘上的大小,以有效地重复使用 为未来的空间物体
但也有书面
额外的空间最终将被未来写入重用,或者可能是 压缩 - 例如通过调用
Realm().writeCopyToPath(_:encryptionKey:)
。
和
呼叫
invalidate
告诉境界,你不再需要任何你从王国至今,这可以让我们阅读 对象从 跟踪这些对象的中间版本。该领域将更新 到最新版本,在访问
境界持有到空间以后使用新的对象:
您也可以删除存储在一个领域中的所有对象。请注意,Realm文件将在磁盘上保持其大小,以有效地将该空间用于将来的对象。
斯威夫特版本3.0.1
对于紧凑型的DB接下来的时间:
func compactRealm() {
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!
let defaultParentURL = defaultURL.deletingLastPathComponent()
let compactedURL = defaultParentURL.appendingPathComponent("default-compact.realm")
autoreleasepool {
let realm = try! Realm()
try! realm.writeCopy(toFile: compactedURL)
try! FileManager.default.removeItem(at: defaultURL)
try! FileManager.default.moveItem(at: compactedURL, to: defaultURL)
}
}
所以要添加到..当数据库很大时,一次又一次压缩它会是一种好的做法吗?看来我不能覆盖现有领域,所以我需要制作一个新的领域,删除旧领域,然后重新命名。有点乏味... – JoeBayLD
为了紧凑你的数据库:http://stackoverflow.com/questions/36877745/how-do-you-compact-a-realm-db-on-ios/36885810#36885810 –