我有两个模型,它们之间存在多对多关系。模型 A 以空状态开始,而模型 B 有大约 220k 条记录(索引相当大,但这不应该影响,因为这个模型永远不会更新)。
从 A->B 的对多如下:
- 可选 => 假
- 瞬态 => 假
- 索引 => 真
- 有序 => 真
- minCount => 0
- maxCount => NSIntegerMax
- deleteRule => NSCascadeDeleteRule
B->A 的一对多如下:
- 可选 => 真
- 瞬态 => 假
- 索引 => 假
- 有序 => 假
- minCount => 0
- maxCount => NSIntegerMax
- deleteRule => NSNullifyDeleteRule
当然,每个关系都被设置为另一个关系。我面临的问题如下:在创建新实体 A 之前,应用程序执行一个获取请求,该请求获取实体 B 的大约 2k 条记录。然后,应用程序将这些记录设置为即将创建的实体 A,然后保存上下文。问题是将 2k 条记录的 nsorderedset 设置为实体 A 实例在装有 iOS 6.0.1 的 iPhone 4S 中或多或少需要 4 秒,而在同一设备中保存上下文又或多或少需要 4 秒。这使得创建模型 A 的新实例需要 8 秒。
我已经尝试启用/禁用模型 A 中的索引关联属性,但这并没有产生如此大的差异。我要完成的任务有那么重吗?
进行了一些测试,我观察到大部分时间都因为反向关系而丢失了将 nsorderedset 设置为实体 A 实例。我做了一个快速测试,将目标模型中的多对多关系更改为无反比关系的多对多,然后插入时间减少到一半。当然,这打破了多对多的关系。这只是一个快速测试。
我在这里错过了什么吗?由于该应用程序只保存一次上下文,而不是每个记录 B 一次,因此保存 2k 条记录不应该花那么长时间,但我是 iPhone 开发的新手,也许我正在执行的这个任务是这种设备太多了。
任何提示将不胜感激。谢谢!