我编写了一个包含许多自定义视图的应用程序,通常会绘制很多行和位图。由于性能对应用程序来说有点关键,因此我花了很多时间来优化绘图性能。
现在,活动监视器告诉我,我的应用程序通常使用大约12%的CPU和仪器(分析器)说在objc_msgSend
中花费了大量10%的CPU(主要用于绘制相关的系统调用)。 / p>
一方面,我很高兴这一点,因为这意味着我的绘图的速度和它的优化速度一样快,而且我的优化也取得了巨大的成功。另一方面,它似乎意味着仍然使用我的CPU的唯一事情是消息的Objective-C开销(objc_msgSend
)。因此,如果我在Carbon中编写了应用程序,那么它的性能将会大大改善。
现在我很想得出结论,Objective-C是一种表现不佳的语言,尽管Cocoa似乎效率非常高,因为它显然可以比Objective-C发送消息更快地绘制。
那么,Objective-C真的是一种表现不佳的语言吗?你怎么看待这个?
答案 0 :(得分:9)
不,Objective-C的表现并不差。为了证据,我引用@bbum关于objc_msgSend的手动优化组装的系列文章:
换句话说,objc_msgSend
很快;方法调度不是你的问题。您是否可以发布导致您相信的分析信息?您可能误读了分析,或者您正在做一些非常奇怪的事情,等等。
但我保证objc_msgSend
不是问题所在。如果是的话,我们现在肯定会听说过它。 :)
答案 1 :(得分:2)
您在哪个方向查看呼叫树(请参阅标记为“反向呼叫树”的复选框)?
如果您将调用堆栈反转,您是否已深入到objc_msgSend以查看花费的时间?
默认显示的“运行时间%”(cntrl-click to change)表示“代码忙碌的时间百分比” - 例如。如果你运行1个短快速方法然后空闲10小时你的方法的百分比时间,因此对于objc_msgSend,因为这是调用你的方法的方法 - 将是%100 - 这并不意味着objc_msgSend很慢。 / p>