核心数据和糟糕的表现

时间:2010-06-07 16:13:14

标签: cocoa performance macos core-data

我已经在这个问题上工作了一段时间,我对任何最佳实践/建议持开放态度。

示例

所以我创建了一个示例Core Data应用程序。该应用程序基本上是AddressBook应用程序的模仿。我有以下实体:集团,联系人,地址,电话,电子邮件,网页,日期。

正如您可能猜测的那样,一个群组可以拥有多个联系人,一个联系人可以分为多个群组。联系人也可以有多个地址,电话,电子邮件,网页和日期。

我基本上是从AddressBook向这个应用程序导入了大约600个联系人。用户界面相对简单......左边是一个组/类别列表,右边是一个NSCollectionView或NSTableView,它根据所选的组显示联系人列表。(集合视图或表视图...我添加了显示任一视图的能力,两者都绑定到NSArrayController)

我通过代码而不是Interface Builder提供的Group元素,因为我想要使用Thing的类似侧边栏进行游戏,并且这样做更容易。

问题

其中一个类别包含所有联系人,而另一个类别仅包含2个联系人。当我选择包含所有联系人的类别时,需要8-10秒的时间来填充集合或tableview。然而,在AddressBook本身做同样的事情是非常迅速的,几乎是即时的。我正在使用SQLLite存储类型,并尝试使用许多不同的方法,包括尝试通过Instruments诊断问题,但没有任何工作。

我已尝试将谓词设置为Contact的数组控制器的defaultFetchPredicate,而不是设置过滤谓词,但这不起作用。

我尝试了preFetching和faulting,但我不确定我是否做得对,如果Interface Builder处理Contact的NSArrayController,我不确定如何完成它。

其他示例

我也尝试下载一个示例Core Data应用程序...虽然它的关系模型比我做的更简单(基本上Molecule有Atom对象,Atom对象有Element对象),我插入了65,000条记录,它表现得像一个魅力。

问题

我基本上打了一堵墙,我想知道是否有其他人知道为什么会发生这种情况以及解决/克服/避免此类问题的最佳方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

事实证明,实际上NSCollectionView正在减慢速度。我想创建和操纵视图x多个集合视图视图会增加大量的开销。可以使用IKImageBrowserView,但它不是我想要的。

我最终更改了应用程序布局以解决此问题。

全部谢谢!