【问题标题】:How to find speed bottleneck in NSArrayController?如何在 NSArrayController 中找到速度瓶颈?
【发布时间】:2014-05-29 11:31:31
【问题描述】:

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

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

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

我尝试了 Time Profiler 来查看发生了什么,但深入调用堆栈并没有多大帮助。您会深入嵌套消息,每条消息都需要一些时间,最后没有一点可以说就是这样。

还有其他想法吗?

【问题讨论】:

    标签: cocoa core-data nsarraycontroller


    【解决方案1】:

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

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

    【讨论】:

    • 我认为瓶颈不是CoreData,因为在切换类别时所有数据都已加载。只需将数组控制器的内容替换为另一个数组并将其传播到应用程序即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多