我正在使用UIManagedDocument
在應用程序中設置核心數據。然後,我在一個循環中向數據庫添加大約1000個NSManagedObject
(s)。我使用的最初處理的對象的數據在後臺線程:使用加速通過UIManagedDocument將對象插入到Core Data中?
NSManagedObjectContext *moc = [[self managedDocument] managedObjectContext];
[moc performBlock:^{
// ADD TO CORE DATA
...
...
:
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(backgroundQueue, ^{
// PROCESS OBJECTS HERE
...
...
從後臺線程將它們添加到核心數據之前
// CREATE
Fruit *fruit = [NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:context];
// POPULATE
[fruit setName:name];
[fruit setAge:age];
[fruit setType:type];
...
我的問題是:
對1進行上述操作000+對象目前大約需要2.2secs,我沒有對Core Data進行任何保存,直到所有的對象都被插入,所有對象都在內存中完成,沒有I/O開銷。正如你上面所看到的,我所有的處理都是在後臺線程上完成的,但是當我將新對象插入到Core Data中時,我必須使用performBlock:來確保插入在UIManagedDocument最初的主線程上完成創建。
我想知道的是,是否有加快插入對象的方法,可能是將多個NSManagedObjects「批處理」在一起並將它們添加到一個命中中,或者只是採取相同的數量時間與我現在正在做的一樣(它仍然增加了1000多個對象)。
我讀過一些關於創建一個新的上下文,然後將其與NSManagedDocument上下文合併,但我不知道如果這是適當的或如何做到這一點,如果是。任何幫助/信息將不勝感激。
謝謝你的發帖,非常感謝。 – fuzzygoat