我有两个模型,它们之间有多对多的关系。模特A. 以空状态开始,而模型B有大约220k记录(有一个相当的 大索引,但这不应该影响,因为这个模型永远不会更新。)
A-> B的to-many如下:
B-> A的to-many如下:
当然,每个关系都设置为另一个关系的倒数。问题我是 faces是以下内容:在创建新实体A之前,应用程序执行a 获取请求,获取实体B的大约2k条记录。然后,应用程序设置 这些记录即将创建的实体A,然后保存上下文。 问题是将2k记录的nsorderedset设置为实体A实例 在带有iOS 6.0.1的iPhone 4S中,或多或少需要4秒钟,并保存 上下文在同一设备中或多或少地花费4秒钟。这样做 8秒创建模型A的新实例。
我尝试在模型A中启用/禁用索引关联属性,但是 这并没有产生这样的影响。这是我正在努力的任务 实现
进行一些测试,我发现大部分时间都没有设置 nloderedset到实体A实例是因为反向关系。一世 做了一个快速的测试,将多对多的关系改为多对多关系 目标模型中的反向关系,然后插入时间下降到 一半的时间。当然,这打破了多对多的关系。这只是 快速测试。
我在这里遗漏了什么吗?由于应用程序只保存一次上下文, 并且每个记录B不是一次,它不应该花费那么长时间来节省2k 记录,但我是iPhone开发的新手,也许我正在执行这项任务 这种设备太过分了。
任何暗示都会有很大的暗示。谢谢!
答案 0 :(得分:0)
Ferdev,
感谢您提出一个写得很好的问题。很明显,在寻求帮助之前,您已仔细考虑过您的问题。这有助于每个人。
核心数据在保存时似乎不使用块操作。因此,您将遇到性能问题。虽然关系设置应该比你看到的要快。(顺便说一句,大多数性能问题都是由闪存的速度驱动的。在iOS设备上它很慢。因此,预取以保持你的MOC热你的数据很重要批量提取很重要。)
我做了几点观察:
为什么A-> B to-many关系既有索引又有序?订购会减慢您的插入速度。索引关系也有意义吗?
您使用的是批量关系设置器(-add<Key>:
)吗?
在将实体B记录设置为实体A实例之前,是否正在获取所有2000个实体B记录?
即使这不会影响您的插入性能,为什么删除规则来自A-> B级联?你在上面写的实体B没有改变。
安德鲁