Итак, я пытаюсь получить около 2000 объектов из базовых данных и пытаюсь выяснить, какой из них был бы наиболее быстрым для их извлечения.
Без NSPredicates:
Когда я добавляю этот блок (ниже), оператор if
занимает 90% от общего времени, необходимого для выполнения, что понятно, и поэтому я закомментирую его.
Block {
NSError *error;
NSManagedObjectContext *context = <#Get the context#>;
// The IF block
/* if (![context save:&error])
{
NSLog(@"error %@", error);
}
*/
// The block above takes 90% of the total time of fetch
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *theEntity = [NSEntityDescription
entityForName:@"EntityName" inManagedObjectContext:context];
[fetchRequest setEntity:theEntity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
}
С предикатами NSP:
Я устанавливаю предикат как
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"handle == %@",handle];
и выполняю ту же выборку, как показано в Block()
Видно, что общее время с точностью до наоборот - примерно на 90% быстрее, если я использую IF BLOCK
~ 6 секунд.
В противном случае, если этот блок прокомментирован, выборкаВремя много ~ 3 минуты.Это происходит только при установке predicate
для fetchRequest
.
Может кто-нибудь объяснить, пожалуйста?
То есть
/*
Save + straight fetch = slow, due to saving.
Straight fetch - pretty fast.
Predicate fetch, slow.
Save + predicate fetch, much faster?
*/