Ios 核心数据。填充两个双链接实体的最快方法?

Ios 核心数据。填充两个双链接实体的最快方法?,ios,core-data,entity,Ios,Core Data,Entity,我有2个表(和类似实体): 类别(具有字符串属性标识符) CategoryLink(具有属性category1和category2,它们是指向类别对象的指针) 我有一个文本文件,里面有关于类别及其链接的信息。关于链接的信息表示为第一和第二链接id对 我想用核心数据填充我的数据库。我填充类别的速度足够快,但我在使用CategoryLink时遇到性能问题 我的最佳实施方案是: 获取按标识符排序的所有类别 获取从文件到字典数组的整个链接信息,按第一项id排序 (1)中每个类别的循环 在循环(3)中,我

我有2个表(和类似实体):

  • 类别(具有字符串属性标识符)

  • CategoryLink(具有属性category1和category2,它们是指向类别对象的指针)

  • 我有一个文本文件,里面有关于类别及其链接的信息。关于链接的信息表示为第一和第二链接id对

    我想用核心数据填充我的数据库。我填充类别的速度足够快,但我在使用CategoryLink时遇到性能问题

    我的最佳实施方案是:

  • 获取按标识符排序的所有类别

  • 获取从文件到字典数组的整个链接信息,按第一项id排序

  • (1)中每个类别的循环

  • 在循环(3)中,我在迭代中使用(2)中的ID搜索第二个类别,并创建CategoryLink实体的对象


  • 性能太慢,因为需要插入大量类别和CategoryLink记录。那么有什么方法可以提高性能呢?

    假设您在内存中进行所有查找,最重要的性能因素是您保存上下文的频率

    不要在循环的每个迭代中保存。尝试分批保存。理想的数字取决于数据,但通常在500-2000左右

    首先,试着只在最后存钱,看看需要多长时间


    我会反复浏览你的字典分类列表,并始终保留对catgory1的引用

    哪一部分需要很长时间?此外,是否存在重复项(如AB和BA)?类别和类别链接记录都是唯一的。很难说哪个部分占用了大部分时间,因为代码在一个块中。但我认为最长的任务是搜索第二个类别,搜索次数至少与CategoryLink实体对象的数量相同,您也可以在一个块内搜索时间。执行
    NSTimeInterval x=[[NSDate-date]timeIntervalSince1970]并记录差异。确定。我检查了,它仍然在搜索第二个类别,即使没有(4)中的其他操作。但它看起来足够快(~0.036秒)。另外,您不需要使用特殊计时器,除非您需要执行某些特殊计算,如间隔。在大多数情况下,只需记录一些内容(它也会写入日志时间)就足够了。对于性能问题,请在Instruments下运行应用程序。你会更清楚地了解你的应用程序在哪里花费时间。你能再多说一点吗。我有2个线程,而数据库正在填充。第一个线程是main,第二个线程由我创建,用于填充数据库,与屏幕绘制/更新分开。如您所见,前面描述的代码不包含[上下文保存:…]。应用程序仅在实体对象的创建和填充方面太慢。