我在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