2016-09-24 9 views
0

私の質問に答えてスタックをブラウズしました。誰もがカウントリクエストを行う方法です。私は私のアプリで単体テストを実行したときに間違っていることがわかった。コアデータに項目が存在するかどうかチェックしてください。

for number in largeNumber { //large number is 1000 

    let count = try self.context.count(for: countRequest) 

    } 

操作は0.2秒かかりました。

for number in largeNumber { //large number is 1000 

let fetch = try self.context.fetch(fetchRequest) 

} 

//操作は0.158秒かかったのに対し!

だから、何人もカウントのリクエストがもっと効率的になっています。それは何かが悪化する。つまり、コアデータに値が存在するかどうかを確認するより効率的な方法がありますか?

答えて

0

2つのバージョンで行われていることの違いが原因です。 数値は、検出された管理オブジェクトの数を返します。 フェッチは属性、リレーションシップなどを設定する可能性があります。

コアデータはこの情報をキャッシュして、同じフェッチ要求を繰り返す必要がない可能性があります。結果は(あなたの例では)1フェッチリクエストと999ノーオペレーションと同等です。

カウントは、管理対象オブジェクトを設定していないため、最も効率的です。 1000回ループするが、それぞれが異なる述語を持つとどうなるでしょうか?

関連する問題