2016-09-24 90 views
0

因此,我瀏覽了堆棧以回答我的問題,並且每個人都在說計數請求是要走的路。我發現,當我在我的應用上運行單元測試時是錯誤的。檢查項目是否存在於核心數據中EFFICIENTLY

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

測試的結果可能是由於兩個版本中所做的工作有所不同。 計數返回找到的管理對象的數量。 提取很可能是填充屬性,關係等

核心數據可能會緩存此信息,以便不必重複相同的提取請求。結果(在你的例子中)可能相當於1個獲取請求和999個無操作。

計數應該是最有效的,因爲它沒有填充管理對象。如果循環1000次,但每次傳遞的謂詞不同,會發生什麼?

相關問題