class RealmManager {
static let shared = RealmManager()
private var realm: Realm?
private init() {
let config = Realm.Configuration(schemaVersion: 1, shouldCompactOnLaunch: { totalBytes, usedBytes in
// totalBytes refers to the size of the file on disk in bytes (data + free space)
// usedBytes refers to the number of bytes used by data in the file
// Compact if the file is over 100MB in size and less than 50% 'used'
let oneHundredMB = 100 * 1024 * 1024
return (totalBytes > oneHundredMB) && (Double(usedBytes) / Double(totalBytes)) < 0.5
})
do {
// Realm is compacted on the first open if the configuration block conditions were met.
realm = try Realm(configuration: config)
} catch let error {
// handle error compacting or opening Realm
print(error)
}
}
}
4条答案
按热度按时间mcdcgff01#
就像我说的,
领域文件将保持其在磁盘上的大小,以便为将来的对象有效地重用该空间
但也有书面
额外的空间最终将被未来的写入重用,或者可以被压缩-例如通过调用
Realm().writeCopyToPath(_:encryptionKey:)
。和
调用
invalidate
告诉Realm您不再需要目前从Realm中读取的任何对象,这使我们不必跟踪这些对象的中间版本。rks48beu2#
我也意识到我的Realm文件太大了(而且从来没有减小过),我的解决方案是以下面的方式初始化Realm数据库:
关键是将shouldCompactOnLaunch块添加到我的配置中,请注意,压缩操作将在另一个进程访问您的领域数据库之前完成(例如:在Realm Studio中打开的数据库)。
有关详细信息,请查看以下链接:https://realm.io/docs/swift/latest/#compacting-realms
vxf3dgd43#
领域保留该空间,以便稍后用于新对象:
您也可以删除储存在范围中的所有对象。请注意,范围档案会维持其在磁盘上的大小,以便有效地将该空间重新用于未来的对象。
请参阅本部分文档
dluptydi4#
Swift 3.0.1版
对于压缩数据库: