2011-10-13 121 views
2

我當然讀了doc,但我不太明白「設置任何部分和排序內容」的含義。緩存對NSFetchedResultsController有什麼影響

  1. 這些信息不是來自數據庫嗎?
  2. 這是否意味着NSFetchedResultsController除了數據庫索引外還需要一些其他類型的索引本身?
  3. NSFetchedResultsController設置緩存時,究竟發生了什麼?
  4. 緩存僅用於靜態數據嗎?如果我的數據頻繁更新,我應該使用緩存嗎?
  5. 如何描述緩存的性能?我試過緩存,但看不到任何性能改進。我計時-performFetch:,但看到時間從0.018s(沒有緩存)增加到0.023s(緩存)。我也計時-objectAtIndexPath:,只有一個時間從0.000030(無緩存)減少到0.000029(有捕獲)。

換句話說,我想知道cache何時(或不)提高性能和原因。

正如@馬庫斯指出的那樣,「500條目很小,核心數據可以處理那些沒有人類明顯滯後的情況,當你有成千上萬條記錄時使用緩存。所以我認爲有幾個應用程序可以從使用緩存中受益。

回答

7

NSFetchedResultsController的緩存是一種捷徑。它是來自NSFetchRequest的最後結果的緩存。這並不是整個數據,但NSFetchedResultsController的數據足以快速顯示其結果;很快。

這是來自數據庫的數據的「副本」,它以易於在下一個實例化中被NSFetchedResultsController使用的格式序列化到磁盤。

從另一個角度來看,它是最後一個閃存凍結到磁盤的結果。

+0

謝謝,@Marcus。如果我的數據頻繁更新,我應該使用緩存嗎? – an0

+0

我會使用緩存,除非您經常更改謂詞。 –

+0

我試過緩存,但看不到任何性能改進。如何分析緩存的性能?我計時-performFetch:但看到時間從0.018s(沒有緩存)增加到0.023s(緩存)。我也計時-objectAtIndexPath:只有一個時間從0.000030(沒有緩存)減少到0.000029(帶有捕獲)。 – an0

0

NSFetchedResultsControllerdocumentation

如果可能的話,一個控制器使用的緩存中以避免需要重複設置任何部分訂購內容

執行工作

要充分利用緩存,您應該使用切片或排序數據。

因此,如果在initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:中設置sectionNameKeyPathnil,那麼您可能不會注意到任何性能增益。

相關問題