根据设计,Core Data不会向其SQLite数据库发出 VACUUM SQL命令,如detailed here。我正在创建一个Core Data应用程序,它将在SQLite数据库中存储并稍后删除大型二进制文件(大小为2-10MB)。随着时间的推移,这将导致碎片化和大于必要的SQLite数据库。我想在我运行的清理操作期间定期发出VACUUM命令。
答案 0 :(得分:12)
在OS X 10.6 / iOS 3.0及更高版本上,支持的方法是在将商店添加到持久性存储协调器时在选项中设置NSSQLiteManualVacuumOption。
答案 1 :(得分:2)
是的,vacuum
是SQLite中公认的SQL语句。它可以用作普通查询or so it says。
请注意,因为它可能导致过多的文件系统读取和写入 - 几乎任何系统的瓶颈 - 更不用说Windows服务器上的服务器文件系统碎片。
答案 2 :(得分:0)
以下是您vacuum
CoreData 容器
示例:
let container = NSPersistentContainer(name: "someName")
// Enable history tracking and remote notifications
guard let description = container.persistentStoreDescriptions.first else {
fatalError("###\(#function): Failed to retrieve a persistent store description.")
}
description.setOption(true as NSNumber, forKey: NSSQLiteManualVacuumOption)
//... The rest of your setup
这样做, CoreData 容器将执行vacuum
命令,并据此调整自身大小。