我正在开发一个由 Core Data 支持的应用程序。 现在,当我向上下文添加或删除实体时,我正在保存对象上下文。 我怕影响性能,所以就想着延迟保存。 事实上,我可以一直延迟它,直到应用程序终止。 仅在应用程序即将关闭时才保存数据是否风险太大?我应该多久调用一次对象上下文的保存?
我正在考虑让一个单独的线程处理保存:它将等待信号量。每次应用程序的任何部分调用 helper/util 方法来保存核心数据时,它都会减少信号量。当它降至零时,“保存线程”将执行一次保存,并将信号量增加到 5,然后再次休眠。
有什么好的推荐吗? 谢谢!
最佳答案
您应该经常保存。保存操作的实际性能与您使用的持久存储类型有很大关系。由于二进制和 XML 存储是原子的,因此每次保存时都需要将它们完全重写到磁盘。随着对象图的增长,这确实会减慢应用程序的速度。另一方面,SQLite 存储更容易增量写入。因此,虽然有些内容会写在您要保存的对象之上和之外,但开销比原子存储类型要低得多。无论总体对象图大小如何,仅影响少数对象的保存总是很快。
也就是说,如果您在循环中导入数据,比如说,我会等到完整操作结束才保存,而不是在每次迭代时保存。您的主要目标应该是防止数据丢失。 (我发现用户不太关心这一点!)性能应该紧随其后。您可能需要做一些工作来平衡保存频率与性能,但您上面概述的解决方案似乎有点矫枉过正,除非您已经确定了具体且重大的性能问题。
关于iphone - 我应该多久保存一次到核心数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085170/