仅运行一次的代码的iPhone性能测量?

时间:2009-10-02 07:29:00

标签: iphone performance xcode instruments

我想衡量只运行一次的iPhone上的代码性能,因此Instrument的CPU采样器工具用途有限,因为它需要多次迭代来收集足够的样本。

我是否可以使用每次调用时每个函数的工具?这会调用跟踪而不是统计抽样吗?

此致 约亨

4 个答案:

答案 0 :(得分:8)

问题"Are there non-sampling time-profiling tools for iPhone apps?"与您提出的问题类似。在我的回复中,我指出了DTrace,它可以进行基于函数调用的分析,但不幸的是只能在模拟器中工作,而不能在实际设备上工作。您也可以使用Shark收集数据,并且采样间隔足够小。

最后,可以使用以下代码在您的应用程序中执行代码执行的时间:

CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();

// Your code here

elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"Elapsed time in seconds: %f", elapsedTime);

答案 1 :(得分:2)

如果你有一些大块的代码在一次被调用时执行得无法接受,那么它或者在其中有一些耗时的循环或你有一些低效低级函数调用的可能性非常大。循环控制结构应该很容易通过检查来获取,并且通过手动定时CGAbsoluteTimeGetCurrent()和“二进制调试搜索”(这是块的前半部分的瓶颈或者)来定位低效的低级函数通常非常容易。第二季度?第一季度或第二季度等等)

如果无法找到具有该类型搜索的热点,那么这是一个非常好的迹象,表明你做得很好,性能方面,性能更高,需要某种类型的重新思考你的方法。

我不是故意的,但你确定在乎吗?如果代码只执行一次,它的相对性能可能是好奇心而不是最终用户的价值。

答案 2 :(得分:0)

可以通过插入来完成,here是一篇文章,介绍了如何跟踪消息,你也许可以在执行时调整它。

答案 3 :(得分:0)

Pulse工程团队最近发表了一篇关于如何衡量Objective-c代码单行(或更多)性能的文章:http://eng.pulse.me/line-by-line-speed-analysis-for-ios-apps/