菜鸟教程小白 发表于 2022-12-12 09:07:10

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


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

<p>显然,检查点可以在不影响我现有的 MOC 和 PSC 的情况下完成,因为它已经发生了。我只想在不影响用户幸福的众所周知的时间强制它。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>该文档的描述可能很谦虚,但它就是这样完成的。 Core Data 并不是真正的 SQLite 包装器,它提供对 SQLite 的直接访问非常有限。添加持久存储时传递选项是唯一的选择。</p>

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

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

<pre><code>NSDictionary *options = @{NSSQLitePragmasOption:@{@&#34;journal_mode&#34;:@&#34;DELETE&#34;}};
</code></pre>

<p>添加商店时,问题不存在。</p>

<p>如果你想保留 <code>wal</code> 模式,你可以尝试使用选项列表中的其他 SQLite pragma 来调整检查点行为。例如,<code>wal_autocheckpoint</code> pragma 调整检查点发生的频率。通过调整,您可能可以获得更好的结果。您仍然不能按需调用检查点,但您会改变性能。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 强制核心数据检查点?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22822025/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22822025/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 强制核心数据检查点?