如何在NSArrayController中找到速度瓶颈?

时间:2014-05-29 11:31:31

标签: cocoa core-data nsarraycontroller

在我的应用程序中,我有一个类别列表,其属性是一个对象数组。 NSTreeController的content属性绑定到当前类别的数组。类别位于列表中,用户可以从中选择一个。所选类别存储在数组控制器绑定到的窗口控制器的属性中。这很好用。

但是,当用户切换类别时,阵列控制器会获得一个新的内容数组,并且此过程相对较慢。阵列中有大约12000个对象,需要3秒钟。加载时间直接取决于对象的数量。数组越少,此过程越快。作为侧节点,数组中的对象是从CoreData加载的。

显然,阵列控制器正在对每个对象做一些事情。在此期间中断执行总是在一些objc_msgSend()调用中结束。我需要找出它实际上在做什么,所以我可以解决这个问题。我只是不知道如何。

我尝试使用Time Profiler查看发生了什么,但深入调用堆栈并没有多大帮助。你会花费一些时间来深入嵌入消息,最后没有任何一点你可以说这就是它。

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我建议在Core Data上启用sql debug,以便您可以看到SQL语句的外观。您可以做的唯一性能改进是谓词本身。字符串很昂贵,数字很便宜,就像数据库中的查询一样。

在OS X上搜索12000个对象不应该那么慢。我怀疑你的谓词中有性能改进。