gpt4 book ai didi

sqlite - 使用 NSPersistentContainer 从 Core Data SQLite 存储回收空间?

转载 作者:行者123 更新时间:2023-12-02 07:26:24 26 4
gpt4 key购买 nike

我的应用程序使用 Core Data 和 SQLite 存储来实现 Web 缓存(有点像 NSURLCache,但可以更好地控制缓存的内容以及何时可以从缓存中清除)。当旧数据变得太大时,我可以从缓存中清除旧数据,但这实际上并不会减少文件系统中使用的存储空间量。

我知道可以将 NSSQLiteManualVacuumOption 传递给 NSPersistentStoreCoordinator在打开存储时执行 SQLite 真空的选项,我认为这可能是减少文件大小的好方法(即使我必须暂时关闭并重新打开存储)。

但是,我通过 NSPersistentContainer 管理核心数据堆栈。有什么方法可以使用 NSPersistentContainer 进行 Apple 批准的 SQLite 真空处理吗?

或者我是否必须手动建立核心数据堆栈才能执行此操作?

否则,在使用 NSPersistentConainer 时,我还应该如何回收 SQLite 存储空间?

更正:

关于空间没有被自动回收,我有部分错误。即使没有设置 NSSQLiteManualVacuumOption,有时也会自动回收磁盘空间。我不确定这是如何运作的。它不会立即发生,也不会在每次保存上下文时发生,但当它发生时,在从上下文中删除托管对象并保存上下文后很快就会发生。

如果我执行一系列删除/保存命令,它们之间的存储空间不会被释放。但如果我稍后再次检查,该空间已被回收(有时)。

也许 Core Data 默认使用“auto_vacuum”SQLite pragma?虽然如果我记录 sqlite 编译指示,它只会打印一个空字典。

最佳答案

我认为它应该像这样工作;我自己从来没有这样做过:

创建 NSPersistentStoreDescription并将选项设置为包含 NSSQLiteManualVacuumOption 。将此描述分配给 NSPercientContainerpersistentStoreDescriptions加载商店之前的属性。

关于sqlite - 使用 NSPersistentContainer 从 Core Data SQLite 存储回收空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54705980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com