を使用してアプリケーションでコアデータを設定していますUIManagedDocument
。NSManagedObject
次に、ループでデータベースに約1000(s)を追加します。私は最初、以下を使用してバックグラウンドスレッドのオブジェクトのデータを処理しています。
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(backgroundQueue, ^{
// PROCESS OBJECTS HERE
...
...
バックグラウンドスレッドからCoreDataに追加する前に:
NSManagedObjectContext *moc = [[self managedDocument] managedObjectContext];
[moc performBlock:^{
// ADD TO CORE DATA
...
...
使用:
// CREATE
Fruit *fruit = [NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:context];
// POPULATE
[fruit setName:name];
[fruit setAge:age];
[fruit setType:type];
...
私の質問は:
1000以上のオブジェクトに対して上記を実行すると、現在約2.2秒かかります。すべてのオブジェクトが挿入されるまで、Core Dataの保存は実行しないため、I/Oオーバーヘッドなしですべてがメモリ内で実行されます。上記のように、すべての処理はバックグラウンドスレッドで実行されますが、新しいオブジェクトをCore Dataに挿入する場合は、performBlock:を使用して、UIManagedDocumentが元々あったメインスレッドで挿入が行われるようにする必要があります。作成した。
私が知りたいのは、オブジェクトの挿入を高速化する方法があります。おそらく、多数のNSManagedObjectを「バッチ処理」して、1回のヒットで追加する方法がありますか、それとも同じ時間がかかるのでしょうか。私は今やっています(まだ1000以上のオブジェクトを追加しています)。
新しいコンテキストを作成し、それをNSManagedDocumentコンテキストとマージすることについて何か読んだことがありますが、それが適切かどうか、または適切である場合はどのように行うかがわかりません。ヘルプ/情報をいただければ幸いです。