gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:39 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

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

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

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

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