У меня есть большая коллекция объектов CoreData, которые представляют файлы.Периодически мне нужно искать в этой коллекции и находить файлы, которые существуют по заданному пути.В настоящее время я создаю следующий NSPredicate и выполняю довольно простой метод executeFetchRequest, чтобы найти все результаты, соответствующие моему запросу.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"path ==[c] %@", receivedPath];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Files" inManagedObjectContext:self.moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setPredicate:predicate];
[request setFetchBatchSize:10];
NSError *error = nil;
NSArray *results = [self.moc executeFetchRequest:request error:&error];
[request release];
Проблема, с которой я сталкиваюсь, заключается в том, что эта функция вызывается довольно часто, а executeFetchRequestна него приходится значительный процент времени выполнения (Instruments сообщает мне, что на эту функцию в общей сложности приходится около 49,2%, при этом 98,1% от этой суммы было потрачено на вызов executeFetchRequest)Я использую NSSQLiteStoreType
для своего постоянного хранилища, и атрибут path
проиндексирован в моей MOM.
У меня вопрос, как я могу оптимизировать это?Я рассмотрел вопрос о настройке атрибута lowercasePath и исключении модификатора [c] при сравнении, но не уверен относительно того, какое влияние (если таковое имеется) окажет влияние на время выполнения.
Любая помощь будет принята с благодарностью.