我正在使用UIManagedDocument
. 然后我NSManagedObject
在循环中向数据库添加大约 1000 个(s)。我最初使用以下方法在后台线程中处理对象的数据:
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(backgroundQueue, ^{
// PROCESS OBJECTS HERE
...
...
在将它们从后台线程添加到 Core Data 之前:
NSManagedObjectContext *moc = [[self managedDocument] managedObjectContext];
[moc performBlock:^{
// ADD TO CORE DATA
...
...
使用:
// CREATE
Fruit *fruit = [NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:context];
// POPULATE
[fruit setName:name];
[fruit setAge:age];
[fruit setType:type];
...
我的问题是:
对 1000 多个对象执行上述操作目前大约需要 2.2 秒,在插入所有对象之前,我不会对 Core Data 进行任何保存,因此它全部在内存中完成,没有 I/O 开销。如您所见,我的所有处理都是在后台线程上完成的,但是当我将新对象插入核心数据时,我必须使用 performBlock: 以确保在 UIManagedDocument 最初所在的主线程上完成插入创建的。
我想知道的是,有没有一种方法可以加快插入对象的速度,可能是通过将多个 NSManagedObjects 一起“批处理”并一次性添加它们,或者这将花费与什么相同的时间我现在正在做(它仍在添加 1000 多个对象)。
我确实读过一些关于创建新上下文然后将其与 NSManagedDocument 上下文合并的内容,但我不确定这是否合适或如果合适的话该怎么做。任何帮助/信息将不胜感激。