首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于CoreData多到多关系的慢速插入

用于CoreData多到多关系的慢速插入
EN

Stack Overflow用户
提问于 2012-12-26 12:48:13
回答 1查看 1.1K关注 0票数 0

我有两个模特,他们之间有很多关系。模型A在空状态下开始,而模型B有大约220 k记录(有相当大的索引,但这不应该影响,因为这个模型从来没有更新过)。

来自A->B的人数如下:

  • 可选=>假
  • 瞬态=>假
  • 索引=>真
  • 有序=>真
  • minCount => 0
  • maxCount => NSIntegerMax
  • deleteRule => NSCascadeDeleteRule

来自B->A的人数如下:

  • 可选=>真
  • 瞬态=>假
  • 索引=>假
  • 有序=>假
  • minCount => 0
  • maxCount => NSIntegerMax
  • deleteRule => NSNullifyDeleteRule

当然,每一种关系都被设定为相反的关系。我面临的问题是:在创建新的实体A之前,应用程序执行一个获取请求,获取实体B的大约2k条记录。然后,应用程序将这些记录设置为即将创建的实体A,然后保存上下文。问题是将2k记录的nsorderedset设置为实体--在iPhone 4S中,iOS 6.0.1的实例大约要花费4秒,而在同一设备中保存上下文大约要花费4秒。这就需要8秒来创建模型A的一个新实例。

我已经尝试过启用/禁用模型A中的索引关联属性,但这并没有造成如此大的差别。就是我想要完成的任务那么重吗?

进行一些测试后,我注意到,大多数情况下,将nsorderedset设置为实体A实例的原因是逆向关系。我做了一个快速的测试,在目标模型中将多到多的关系转换为没有逆关系的多到多的关系,然后插入时间减少到一半。当然,这破坏了多到多的关系。只是个简单的测试。

我是不是漏掉了什么?由于应用程序只保存上下文一次,而不是每条记录B保存一次,保存2k记录不需要那么长时间,但我对iPhone开发还不熟悉,也许我正在执行的任务对这种设备来说太多了。

任何暗示都会得到极大的认可。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-27 13:23:29

费德夫

谢谢你写得好的问题。很明显,在寻求帮助之前,你已经仔细考虑过你的问题。这对每个人都有帮助。

核心数据在保存时似乎不使用块操作。因此,您将出现性能问题。但是,关系设置应该比您看到的要快。(顺便说一句,大多数性能问题都是由闪存的速度驱动的。它在iOS设备上速度很慢。因此,预取以保持MOC与您的数据热是很重要的。大容量抓取很重要。

我提出几点意见:

为什么A->B到-许多关系既是索引又是有序的?订单会减慢你的插入速度。对一段关系进行索引也有意义吗?

您正在使用批量关系设置程序(-add<Key>:)吗?

在将实体B记录设置为实体A实例之前,是否获取所有2000条实体B记录?

即使这不影响插入性能,为什么从A->B级联删除规则?你写在上面的实体B不会改变。

安德鲁

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14040804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档