2011-10-13 80 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,那么您可能不会注意到任何性能增益。

相关问题