我在SO內進行了搜索,但是在處理關係時,我沒有發現任何關於刪除核心數據中的被管理對象的性能的建議。關於在覈心數據中使用級聯規則刪除被管理對象的性能考慮
這個場景很簡單。
正如你所看到的,有三種不同的實體。每個實體都與下一個級聯鏈接。例如,FirstLevel
具有secondLevels
到SecondLevel
的關係。從FirstLevel
到SecondLevel
的刪除規則是級聯而從SecondLevel
到FirstLevel
的刪除規則是否定。在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
我發佈的代碼被包裝在NSOperation
子類的main
方法。該解決方案允許刪除階段在後臺執行。由於我利用了級聯規則刪除是以半自動方式執行的。我只通過發佈的代碼中的for循環刪除根對象,即FirstLevel
項。以這種方式核心數據爲我做了其餘的。我想知道的是:是否有可能通過半自動刪除操作,並手動執行而不會失去圖形一致性?
做tou想刪除整個圖,我的意思是,清除所有的持久性存儲,或只是一些分支? – 2012-04-17 08:57:50
整個圖。 – 2012-04-17 09:03:14
Thenmaybe這會幫助你嗎?http://stackoverflow.com/questions/3266084/how-to-remove-all-objects-from-core-data – 2012-04-17 09:15:53