一般 CoreData 性能

Posted

技术标签:

【中文标题】一般 CoreData 性能【英文标题】:General CoreData Performance 【发布时间】:2012-04-05 07:38:48 【问题描述】:

关于以最有效的方式使用 coredata,我或多或少有一个普遍的问题。

我尝试了两种不同的方法来管理我的项目视图中显示的数据。

方法 1:当视图被加载时,我执行所有核心数据获取并将结果存储在数组中,然后视图从数组中检索显示的对象。 (即:objectAtIndex:...)

方法 2:viewcontroller 本身让我的数据处理类在移动中执行获取,只要需要特定的 coredata 对象,它就会被获取。

在我当前的项目中,这涉及大约 200-500 个对象,需要根据它们的属性在表格视图中进行排序和显示。

无论我首先加载所有对象还是批量加载它们(具有正确的属性),获取方法都是相同的。

区别主要在于 cellForRow 方法,我必须决定是从数组中选择对象还是直接从 coredata 中选择对象。

这两种方法都可以正常工作,我现在并没有真正看到任何性能差异,但我担心随着项目的扩展和更多数据的一种或另一种方式可能会变慢。

您认为更好的方法是什么?

【问题讨论】:

【参考方案1】:

对于较大的数据集,使用 NSFetchedResultsController 控制器可能会在内存占用峰值方面具有优势,也就是说,它可能经过优化,可以根据表大小从持久存储中获取适量的数据。

使用NSFetchedResultsController,您可以控制获取批量大小,您可以根据获取的托管对象的大小和数量等调整性能。

【讨论】:

嗨 - 感谢您的提示 =) 我在过去一个小时内对 fetchtedresultscontrollers 进行了一些研究,这看起来是一个很好的解决方案 =) 我的数据显示在分组表视图中会导致任何问题吗?目前我用数组表示数据,用于部分相关数据。 NSFetchedResultsController 非常适合通过设置 sectionNameKeyPath 属性来显示分组数据。

以上是关于一般 CoreData 性能的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 排序实体 - 性能

CoreData - 在实体上有许多关系时的性能

CoreData - 按关系批量获取对象以获得更好的性能

CoreData 性能重复实体与属性

CoreData 性能:基于多对多关系

Coredata 性能——为只读数据集提供预填充的核心数据 sqlite db