Objective c 更改我从未打算保存的NSManagedObject实例对性能的影响

Objective c 更改我从未打算保存的NSManagedObject实例对性能的影响,objective-c,core-data,rollback,Objective C,Core Data,Rollback,我有一个基于CoreData的应用程序,它从SQLite持久性存储中检索有关过去事件的数据。一旦我有了过去的事件,我的应用程序就会根据它关于过去事件的数据进行一些统计分析来预测未来的事件。一旦我的应用程序对未来事件做出预测,我想运行另一个算法,对该预测进行评估。我希望做很多这样的评估,所以每次评估的性能优化可能都很关键 现在,我需要表示未来事件预测的所有类都存在于我的数据模型中,对于大多数重要的实体,我都有NSManagedObject子类。对我来说,实现算法的最简单方法是根据预测“填写”未来事

我有一个基于CoreData的应用程序,它从SQLite持久性存储中检索有关过去事件的数据。一旦我有了过去的事件,我的应用程序就会根据它关于过去事件的数据进行一些统计分析来预测未来的事件。一旦我的应用程序对未来事件做出预测,我想运行另一个算法,对该预测进行评估。我希望做很多这样的评估,所以每次评估的性能优化可能都很关键

现在,我需要表示未来事件预测的所有类都存在于我的数据模型中,对于大多数重要的实体,我都有NSManagedObject子类。对我来说,实现算法的最简单方法是根据预测“填写”未来事件的结果,然后使用NSManagedObject实例对过去事件和未来事件的预测运行评估。但是,我通常不想将这些未来事件预测保存在我的持久性存储中:一旦我执行了预测的评估,我想扔掉预测,只保留评估结果。我认为,只要在评估完成后将rollback:message发送到托管对象上下文,就可以非常轻松地完成这项工作

这一切都可以很好地工作,从编码的角度来看,它似乎很容易实现。但是,我想知道,当我不打算保存所做的更改时,是否应该考虑大量使用托管对象的性能问题。鉴于性能可能是一个因素,为此使用NSManagedObject实例有意义吗?当然,它为跟踪更改和支持撤销和复杂实体关系等操作所做的所有工作都会带来一定的开销。我应该担心这项开销吗

当然,我可以创建非NSManagedObject类,这些类实现了模型类的优化版本,以便在进行预测和评估时使用。这将涉及大量额外的工作,包括在过去事件的NSManagedObject实例和未来事件的优化类实例之间来回复制数据所需的工作:如果不需要,我宁愿不创建该代码

当然,它所做的一切都是为了跟踪变化和支持 撤销和复杂的实体关系等功能都会带来一些问题 间接费用的数额

由于其优化,核心数据没有人们期望的开销。通常,在内存中使用托管对象与您自己编写的任何自定义对象和管理代码一样快

我应该担心这项开销吗

如果没有具体的实施细节,我真的说不上来,但很可能不是。您可以针对特定情况手动调整核心数据,以获得更好的性能

最好的方法总是从最简单的解决方案开始,然后只有当测试显示简单的解决方案性能不佳时,才转到更复杂的解决方案

过早优化是万恶之源