11

按照设计,Core Data 不会向其 SQLite 数据库发出VACUUM SQL 命令,详见此处。我正在创建一个核心数据应用程序,它将在 SQLite 数据库中存储并稍后删除大型二进制文件(大小为 2-10MB)。随着时间的推移,这将导致碎片化和超出必要的 SQLite 数据库。我想定期发出一个 VACUUM 命令,比如说,在我运行的清理操作期间。

  • 如何以编程方式向 Core Data 的 SQLite 存储发出 VACUUM 命令?
  • 是否可以通过 Core Data 执行此操作,或者我必须挂载 SQLite 数据库并直接连接到它以执行 VACUUM SQL?
4

3 回答 3

14

在 OS X 10.6 / iOS 3.0 及更高版本上,支持的方法是在将存储添加到持久存储协调器时在选项中设置NSSQLiteManualVacuumOption 。

于 2009-10-09T14:35:03.653 回答
1

是的,vacuum是 SQLite 中公认的 SQL 语句。它可以用作普通查询,或者说它是.

但要小心,因为它可能导致过多的文件系统读取和写入——几乎是任何系统的瓶颈——更不用说 Windows 服务器上的服务器文件系统碎片了。

于 2009-12-29T23:36:39.307 回答
1

这是您vacuumCoreData容器的方法

例子:

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命令并相应地调整自身大小。

于 2020-05-13T12:05:08.423 回答