iphone - 我应该多久保存一次到核心数据?

标签 iphone core-data

我正在开发一个由 Core Data 支持的应用程序。 现在,当我向上下文添加或删除实体时,我正在保存对象上下文。 我怕影响性能,所以就想着延迟保存。 事实上,我可以一直延迟它,直到应用程序终止。 仅在应用程序即将关闭时才保存数据是否风险太大?我应该多久调用一次对象上下文的保存?

我正在考虑让一个单独的线程处理保存:它将等待信号量。每次应用程序的任何部分调用 helper/util 方法来保存核心数据时,它都会减少信号量。当它降至零时,“保存线程”将执行一次保存,并将信号量增加到 5,然后再次休眠。

有什么好的推荐吗? 谢谢!

最佳答案

您应该经常保存。保存操作的实际性能与您使用的持久存储类型有很大关系。由于二进制和 XML 存储是原子的,因此每次保存时都需要将它们完全重写到磁盘。随着对象图的增长,这确实会减慢应用程序的速度。另一方面,SQLite 存储更容易增量写入。因此,虽然有些内容会写在您要保存的对象之上和之外,但开销比原子存储类型要低得多。无论总体对象图大小如何,仅影响少数对象的保存总是很快。

也就是说,如果您在循环中导入数据,比如说,我会等到完整操作结束才保存,而不是在每次迭代时保存。您的主要目标应该是防止数据丢失。 (我发现用户不太关心这一点!)性能应该紧随其后。您可能需要做一些工作来平衡保存频率与性能,但您上面概述的解决方案似乎有点矫枉过正,除非您已经确定了具体且重大的性能问题。

关于iphone - 我应该多久保存一次到核心数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085170/

相关文章:

iphone - 抗锯齿 UIimage 看起来模糊或锯齿状

objective-c - 如何使用 NSManagedObjectSubClass 从 CoreData Base 获取所有记录?

swift - UITableView 中 CPU 使用率异常高

ios - 更新 CoreData 对象而不是插入新对象

iphone - 核心数据迁移失败,错误为 : Failed to save new store after first pass of migration

ios - 现有 sqlite 数据库的核心数据

iphone - 无法从 iPhone 获取联系人

iphone - 将核心数据对象组织成部分

iphone - NSMutableData SetLength错误

javascript - 在 keyup 函数运行时保持 iOS 键盘打开