эй, я застрял с той же проблемой в течение нескольких дней, время для вставки увеличивается постепенно, а в нижних ipad оно также падает с проблемой памяти. Для вставки записей 20k требуется 4-5 минут. efficieny. ? В любом случае я могу это оптимизировать. Пожалуйста, помогите, если сможете.ios Coredata большой набор вставки
+(BOOL) addObjectToProfessionalsDBWithDict:(NSArray*)profArray{
if (!([profArray count]>0 && profArray)) {
return NO;
}
NSManagedObjectContext *thisContext=[self getManagedObjectContext];
for (int i=0; i<[profArray count]; i++) {
NSManagedObject *professionalDBObject = [NSEntityDescription
insertNewObjectForEntityForName:@"ProfessionalsDB"
inManagedObjectContext:thisContext];//initWithDictionary:objectDict]; NSMutableDictionary * objectDict=[profArray objectAtIndex:i];
[professionalDBObject setValue:[objectDict valueForKey:@"Degree"] forKey:@"degree"];
[professionalDBObject setValue:[objectDict valueForKey:@"First_Name"]
// and 10 more values
if(i%500==0){
NSError *error;
NSLog(@"saved rec nu %d",i);
if (![thisContext save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
return NO;
}
else{
NSLog(@"data saved");
}
[thisContext reset];
}
}
[prefs setInteger:numOfRecords forKey:@"numberOfRecords"];
NSError *error;
if (![thisContext save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
return NO;
}
return YES;
}
Я думаю, что ваше повышение производительности - это, прежде всего, менеджер 'nil' undo. Это стандартная практика в случае крупных импортов с детскими контекстами (это упоминается в Руководстве по программированию основных данных). – Mundi
Да, это главное. Вышеприведенный код повышает производительность, поскольку большие данные не раздуваются в одном контексте. –