我有两个模特,他们之间有很多关系。模型A在空状态下开始,而模型B有大约220 k记录(有相当大的索引,但这不应该影响,因为这个模型从来没有更新过)。
来自A->B的人数如下:
来自B->A的人数如下:
当然,每一种关系都被设定为相反的关系。我面临的问题是:在创建新的实体A之前,应用程序执行一个获取请求,获取实体B的大约2k条记录。然后,应用程序将这些记录设置为即将创建的实体A,然后保存上下文。问题是将2k记录的nsorderedset设置为实体--在iPhone 4S中,iOS 6.0.1的实例大约要花费4秒,而在同一设备中保存上下文大约要花费4秒。这就需要8秒来创建模型A的一个新实例。
我已经尝试过启用/禁用模型A中的索引关联属性,但这并没有造成如此大的差别。就是我想要完成的任务那么重吗?
进行一些测试后,我注意到,大多数情况下,将nsorderedset设置为实体A实例的原因是逆向关系。我做了一个快速的测试,在目标模型中将多到多的关系转换为没有逆关系的多到多的关系,然后插入时间减少到一半。当然,这破坏了多到多的关系。只是个简单的测试。
我是不是漏掉了什么?由于应用程序只保存上下文一次,而不是每条记录B保存一次,保存2k记录不需要那么长时间,但我对iPhone开发还不熟悉,也许我正在执行的任务对这种设备来说太多了。
任何暗示都会得到极大的认可。谢谢!
发布于 2012-12-27 13:23:29
费德夫
谢谢你写得好的问题。很明显,在寻求帮助之前,你已经仔细考虑过你的问题。这对每个人都有帮助。
核心数据在保存时似乎不使用块操作。因此,您将出现性能问题。但是,关系设置应该比您看到的要快。(顺便说一句,大多数性能问题都是由闪存的速度驱动的。它在iOS设备上速度很慢。因此,预取以保持MOC与您的数据热是很重要的。大容量抓取很重要。
我提出几点意见:
为什么A->B到-许多关系既是索引又是有序的?订单会减慢你的插入速度。对一段关系进行索引也有意义吗?
您正在使用批量关系设置程序(-add<Key>:)吗?
在将实体B记录设置为实体A实例之前,是否获取所有2000条实体B记录?
即使这不影响插入性能,为什么从A->B级联删除规则?你写在上面的实体B不会改变。
安德鲁
https://stackoverflow.com/questions/14040804
复制相似问题