• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 强制核心数据检查点?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:07:10 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我编写了一个通过 Core Data 搅动大量数据的应用程序。在用户在后台退出应用程序后,我会清理这些数据。因为 WAL 检查点似乎是我的 UI 暂停的主要原因,所以我还想强制一个 WAL 检查点。 (是的,我知道创建第二个核心数据堆栈。这也将完成,但这个问题仍然存在。我有使用第二个堆栈的现有实验,但它们尚未产生任何明显的优势。)谷歌揭示了下一页,New Default Journaling Mode ,它对如何在将数据库复制到其他地方之前强制执行数据库检查点进行了非常温和的讨论。我的问题是我想在不破坏整个 UI 的情况下强制在实时数据库上设置检查点。我将持久存储重新添加到协调器的实验无济于事。它们会导致无限循环。

显然,检查点可以在不影响我现有的 MOC 和 PSC 的情况下完成,因为它已经发生了。我只想在不影响用户幸福的众所周知的时间强制它。



Best Answer-推荐答案


该文档的描述可能很谦虚,但它就是这样完成的。 Core Data 并不是真正的 SQLite 包装器,它提供对 SQLite 的直接访问非常有限。添加持久存储时传递选项是唯一的选择。

简而言之:您不能在实时持久存储上强制设置检查点。

您可以做的是一直使用该方法,一直更改为回滚日志模式,而不仅仅是用于检查点目的。通过使用 journal_mode 选项,您可以将 SQLite 切换到不需要检查点的不同模式。只要你包括

NSDictionary *options = @{NSSQLitePragmasOption{@"journal_mode""DELETE"}};

添加商店时,问题不存在。

如果你想保留 wal 模式,你可以尝试使用选项列表中的其他 SQLite pragma 来调整检查点行为。例如,wal_autocheckpoint pragma 调整检查点发生的频率。通过调整,您可能可以获得更好的结果。您仍然不能按需调用检查点,但您会改变性能。

关于ios - 强制核心数据检查点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22822025/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap