我已经问过类似的问题,但仍然无法解决。我有一个包含30k多个记录的核心数据数据库。我正在尝试将其获取到tableview中。我看了关于核心数据的WWDC演示,无论演示者认为什么都不适合我。我从该表中删除了大多数字段,只剩下了4个包含nsstring和date的字段。我使用了setFetchBatchSize并使用了不同的数字,并且在使用仪器时,提取控制器仍在提取所有30k记录。我看着它,仍然不知道我在做什么,以降低获取。我使用了一个单独的线程并显示了svprogreshud,但是我猜这使它变得更慢,因为该线程没有立即运行。

另外,数据被划分为12个部分,而我在核心数据库中有一个字段供它使用一个字符来设置各个部分。

我还设置了-com.apple.CoreData.SQLDebug 1,并且在设备上运行时,它显示了3sec加载具有所有记录的获取请求,但显示了
CoreData:sql:编译指示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 ..提取计数36684,然后是另一个具有Fetch Count 12的采样器。在 Activity 监视器中,该应用程序占用91mb实际内存。无论如何,这次有什么改善?我还能检查一下挂断电话在哪里?

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

现在的数据模型具有一个实体,其中5个属性作为字符串,1个属性作为日期

最佳答案

我想我过去曾对一个非常类似的问题发表过评论。您绝对必须运行Instruments并查看其内容。它会告诉您确切的时间。

您正在使用的部分可能会很昂贵。您的部分属性“pplicon”是否在数据库中设置为索引?如果不是这样,您绝对必须扫描数据库中的所有项目。不扫描所有记录的唯一机会是将其作为索引。内部结构也许能够仅使用索引表来获取唯一索引值。但是,它仍然必须返回节对象。

再次,您必须在测试时打开仪器,以便您可以准确地看到花费的时间。

关于objective-c - 有没有一种方法可以加快从Core Data的提取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10508124/

10-12 14:46
查看更多