Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 有没有办法加快从核心数据获取的速度_Objective C_Ios - Fatal编程技术网

Objective c 有没有办法加快从核心数据获取的速度

Objective c 有没有办法加快从核心数据获取的速度,objective-c,ios,Objective C,Ios,我已经问了一个类似的问题,但仍然无法让它起作用。我有一个核心数据数据库,记录超过30k。我正试图把它放到一个桌面视图中。我观看了WWDC关于核心数据的演示,无论演示者提出什么建议,它对我都不起作用。我从表中删除了大部分字段,只剩下4个字段,其中包含nsstring和date。我使用了不同数字的setFetchBatchSize,但在使用仪器时,fetch控制器仍在获取所有30k记录。我仔细看了一遍,仍然不知道我在做什么来降低价格。我使用了一个单独的线程并显示了svprogreshud,但我想这会

我已经问了一个类似的问题,但仍然无法让它起作用。我有一个核心数据数据库,记录超过30k。我正试图把它放到一个桌面视图中。我观看了WWDC关于核心数据的演示,无论演示者提出什么建议,它对我都不起作用。我从表中删除了大部分字段,只剩下4个字段,其中包含nsstring和date。我使用了不同数字的setFetchBatchSize,但在使用仪器时,fetch控制器仍在获取所有30k记录。我仔细看了一遍,仍然不知道我在做什么来降低价格。我使用了一个单独的线程并显示了svprogreshud,但我想这会使它更慢,因为线程没有立即运行

此外,数据分为12个部分,我在核心数据库中有一个字段,其中一个字符用于设置部分

我还设置了-com.apple.CoreData.SQLDebug 1,当在设备上运行时,它显示了3sec加载的fetch请求和所有记录,但没有显示 CoreData:sql:pragma cache_size=200 CoreData:注释:36684行的总提取执行时间:3.1087s

下面是一些代码

-(void)useDocument{

    if (self.peopleDatabase.documentState == UIDocumentStateClosed){
        [self.peopleDatabase openWithCompletionHandler:^(BOOL success){
            [self setupFetchResultsController];

        }];

    } else if (self.peopleDatabase.documentState == UIDocumentStateNormal){
        [self setupFetchResultsController];
    }     
}

-(void)setupFetchResultsController
{

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"people"];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pplicon" ascending:YES]];
    [NSFetchedResultsController deleteCacheWithName:nil];
    self.fetchedResultsController = nil;

    [request setFetchBatchSize:50];
    //[request setFetchLimit:100];

    self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:self.peopleDatabase.managedObjectContext sectionNameKeyPath:@"pplicon" cacheName:@"peopleCache"]; 
}
提前谢谢你

更新 朱迪再次感谢你的回答。 我转到表的核心数据设置,并检查pplicon索引。我还需要检查其他东西吗。我按照wwdc视频的说明,在核心数据回迁中运行了仪器,它显示了NSManagedObjectContext executefetch。。在peopleviewcontroller设置FetchResultsOnToRoller中花费的时间最多为363.75毫秒,UIApplication运行的时间为287.6毫秒。在活动监视器中,该应用程序占用91mb的实际内存。这次还有什么需要改进的吗?我还可以检查什么,看看挂断在哪里

至于部分。我在数据库pplicon中有一个字符,用于显示部分,数据按它排序


目前的数据模型有一个实体,其中5个属性作为字符串,1个属性作为日期。是否计算了节名?计算节名时,核心数据自动获取所有节名并调用节名以获得正确排序。

节名是否计算?当计算节名时,核心数据会自动获取所有节名,并调用节名以获得正确的排序。

我想我在过去对一个非常类似的问题进行了评论。你绝对必须运行仪器,看看它是怎么说的。它会准确地告诉你它在哪里花费时间

您正在使用分区,这可能会很昂贵。您的分区属性pplicon是否在数据库中设置为索引?如果没有,您肯定要扫描数据库中的所有项目。不扫描所有记录的唯一机会是将其作为索引。内部可能只需要使用索引表就可以获得唯一的索引值。但是,它仍然必须返回截面对象


同样,您必须在测试时打开仪器,以便能够准确地看到您在哪里花费时间。

我想我在过去对一个非常类似的问题进行了评论。你绝对必须运行仪器,看看它是怎么说的。它会准确地告诉你它在哪里花费时间

您正在使用分区,这可能会很昂贵。您的分区属性pplicon是否在数据库中设置为索引?如果没有,您肯定要扫描数据库中的所有项目。不扫描所有记录的唯一机会是将其作为索引。内部可能只需要使用索引表就可以获得唯一的索引值。但是,它仍然必须返回截面对象


同样,您必须在测试时打开仪器,以便您可以准确地看到您在哪里花费时间。

如果不看到您用于提取的代码,我们将无法帮助您。我已使用代码进行了更新。如果我需要发布其他部分,请告诉我。使用线程部分似乎更快,但会冻结应用程序。谢谢你@kprobst感谢您修复代码部分。我想知道如何把所有的代码放在那里。每次我复制粘贴时,一些代码都会留在外面。如果我们能看到数据模型,这也会有所帮助。核心数据中的性能问题通常与数据模型有关,而不是与获取数据模型有关。代码块上需要有四个空格的缩进。您粘贴代码时,代码中只有两三个大括号没有“接受”。如果没有看到您用于获取的代码,我们将无法帮助您。我已使用代码进行了更新。请告诉我是否应该发布代码的其他部分。使用线程部分似乎更快,但会冻结应用程序。谢谢你@kprobst感谢您修复代码部分。我想知道如何把所有的代码放在那里。每次我复制粘贴时,一些代码都会留在外面。如果我们能看到数据模型,这也会有所帮助。核心da中的性能问题
ta通常与数据模型的关系比数据模型的关系更密切,这没有问题。代码块上需要有四个空格的缩进。粘贴代码时,代码中只有两三个大括号没有“接受”。pplicon有一个字符长吗?如果不使用分区,性能数字有什么不同?你发布的数字没有意义。。。IIRC,你说需要几秒钟,数据说加载获取请求需要1/3秒……我想发生的是,仪器在模拟器上运行,sql信息从设备上运行。这是有道理的。在emulator中,它的加载时间不到一秒,在iPhone4S上大约需要3秒,我将尝试删除部分,但在实现之前,这并没有快多少。pplicon只是我用来分割数据的一个unicode字符。这是一个有趣的问题。不幸的是,我们只是在评论中来回开玩笑,浪费时间。我很乐意在聊天室中讨论这个问题,或者如果您愿意,将整个数据库转换为JSON—非常容易,然后发布到某个地方。我会下载它,用它工作一点,我们可以在这里结束这个问题。如果你可以在聊天室。我很难解释这个问题。请让我知道你什么时候在那里,我会连接到聊天室。非常感谢你!当然,把它寄给我,我会看一看。pplicon有一个字符长吗?如果不使用分区,性能数字有什么不同?你发布的数字没有意义。。。IIRC,你说需要几秒钟,数据说加载获取请求需要1/3秒……我想发生的是,仪器在模拟器上运行,sql信息从设备上运行。这是有道理的。在emulator中,它的加载时间不到一秒,在iPhone4S上大约需要3秒,我将尝试删除部分,但在实现之前,这并没有快多少。pplicon只是我用来分割数据的一个unicode字符。这是一个有趣的问题。不幸的是,我们只是在评论中来回开玩笑,浪费时间。我很乐意在聊天室中讨论这个问题,或者如果您愿意,将整个数据库转换为JSON—非常容易,然后发布到某个地方。我会下载它,用它工作一点,我们可以在这里结束这个问题。如果你可以在聊天室。我很难解释这个问题。请让我知道你什么时候在那里,我会连接到聊天室。非常感谢你!当然可以,把它寄给我,我去看看。