コメントによると、実際には1回の操作で多くのデータを書き込むのではなく、オブジェクトをフェッチしただけであるから、MOC
という単体を使用することをお勧めします。
MOC
が複数存在する通常の理由は、Main context
と他のコンテキストとは独立して多数のデータを読み取り/更新/保存することです。そのようなフローでは、異なるコンテキストから同時にオブジェクトを保存することができます。
私が正しく理解していれば、あなたの場合ではありません。
1回のフェッチでは、1つの数字がPrivate context
で十分ですが、多くのコンテキストを作成するにはオーバーヘッドが大きくないと思います。しかし、なぜ余分な仕事をするのですか?
1.So
は、あなたがプライベートMOC
let privateContext = NSManagedObjectContext(concurrencyType:.privateQueueConcurrencyType)
2.Create各操作を作成して、操作が機能付きプライベートMOCへの同期呼び出しを行うMOC
let operation = MyOperation(context: privateContext)
3.Inを渡します。 このようにあなたが例えば
let myObject: Object?
privateContext.performAndWait {
myObject = privateContext.fetch(...)
}
// do what you need with myObject
を単一MOC
を持つ任意の同時問題を回避する必要があり、あなたのNSOperationQueueのmaxConcurrentOperationCountは何ですか? NSOperationsを同時に実行できますか?単一のNSOperationによって実行される作業の量(保存するオブジェクトの量または作業を行う秒単位)は何ですか? – Sander
1. maxConcurrentOperationCountは現在デフォルトのままです。 2.単一のNSOperationによって行われる作業の量は何ですか? - サーバオブジェクトと比較してコアデータから1つのオブジェクトがフェッチされ、その後オブジェクトが勝ち、オブジェクトとファイルがアップロードまたはダウンロードされてディスクに書き込まれます。 – user3519594
説明したように、一度の操作で多数の新しいデータをCoreDataに保存することはありません。したがって、単一のコンテキストを持ち、そこから任意のオブジェクトをフェッチできます。並行性の問題を避けるために、performAndWait関数を使用できます。 – Sander