У меня есть две разные NSManagedObjects
, которые я пытаюсь сохранить в базовые данные (по 100–200 тыс. Записей каждая).У первого списка есть клиенты, у второго - проекты.Между клиентом и проектом существует множество отношений.
Если я зацикливаюсь на проектах и назначаю отношениям с клиентами метод [context save:]
, который будет длиться вечно (более 8 минут, как правило, приложение вылетает из памяти, прежде чем завершится.)
Если я прокомментирую назначение отношения (для целей тестирования мне нужно, чтобы отношение было назначено в этой точке кода.), Тогда метод [context save:]
займет всего пару секунд.Я почти уверен, что данные ядра могут обработать его лучше, так что я упускаю?
** Примечание: я возвращаю каждый объект к ошибке сразу после назначения, вызывая [context refreshObject:] check https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/FaultingandUniquing.html для получения более подробной информации **
NSManagedObjectContext* context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.parentContext = [self moc];
[projectsJSON enumerateKeysAndObjectsUsingBlock:^(id key, id projectJSON, BOOL *stop) {
Project* project = [self Project* project = projectManagedObjectFromJSON:projectJSON inContext:context];
//there's a dictionary of loaded customers in memory
Customer *customer = customers[projectJSON[@"customer_primary_key"]];
[customer addProjectsObject:project];
project.customer = customer;
[context refreshObject:customer mergeChanges:NO];
}];
/*if you comment the last three lines, save will take 1-2 seconds for 100k projects. It currently takes 8+ minutes*/
[context save:&err];
Я ожидаю, что метод [context save:]
этого не сделает, но в результате я назначаю отношения вечно.