Вопросы производительности при удалении управляемых объектов с использованием каскадного правила в Core Data

Я искал в SO, но не нашел никаких предложений по повышению производительности при удалении управляемого объекта в основных данных при работе с отношениями.

Сценарий довольно прост.enter image description here

Как видите, есть три разных объекта. Каждая сущность связана каскадом со следующей. Например, FirstLevelимеет отношение, называемое secondLevelsк SecondLevel. Правило удаления с FirstLevelпо SecondLevelCascade , а правило удаления с SecondLevelпо FirstLevelNullify . Те же правила применяются между SecondLevelи ThirdLevel.

Когда я хочу удалить весь граф, я использую следующий метод.:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FirstLevel" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *items = [context executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];    

// delete roots object and let Core Data to do the rest...
for (NSManagedObject *managedObject in items) {
    [context deleteObject:managedObject];
}

Воспользовавшись правилом Cascade , граф удаляется. Это работает быстро для нескольких объектов, но снижает производительность для многих объектов. Кроме того, я думаю (, но я не очень уверен), что этот тип удаления выполняет много циклов обращения к диску. Я ошибаюсь?

Итак, мой вопрос заключается в следующем:как можно удалить график без использования Каскадного правила и повысить производительность, но в то же время сохранить согласованность графика?

Заранее спасибо.

РЕДАКТИРОВАТЬ

Я не могу удалить весь файл, так как в моей модели есть другие объекты.

РЕДАКТИРОВАТЬ 2

Код, который я опубликовал, заключен в метод mainподкласса NSOperation. Это решение позволяет выполнять фазу удаления в фоновом режиме. Поскольку я воспользовался каскадным правилом , удаление выполняется полуавтоматически. Я удаляю только корневые объекты, элементы FirstLevel, с помощью цикла for в опубликованном коде. Таким образом, Core Data сделает все остальное за меня.Мне интересно следующее:, возможно ли обойти эту полу-автоматическую операцию удаления и выполнить ее вручную без потери согласованности графа?

7
задан Lorenzo B 19 April 2012 в 18:24
поделиться