2

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

有没有一种工具可以让我在每次调用时使用每个函数的时间?那确实调用跟踪而不是统计抽样?

问候, 约臣

4

4 回答 4

8

问题“是否有适用于 iPhone 应用程序的非采样时间分析工具?” 与您要问的类似。在我的回复中,我指出了 DTrace,它可以进行基于函数调用的分析,但不幸的是只能在模拟器中工作,而不是在实际设备上工作。您还可以使用 Shark 收集数据,采样间隔足够小。

最后,如下代码可用于在应用程序中进行代码执行计时:

CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();

// Your code here

elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"Elapsed time in seconds: %f", elapsedTime);
于 2009-10-02T16:00:52.963 回答
2

如果你有一些大块的代码在一次调用时执行不可接受,那么很有可能它要么有一些耗时的循环,要么你调用了一些低效的低级函数。循环控制结构应该很容易通过检查找到,并且通过手动计时 CGAbsoluteTimeGetCurrent() 和“二进制调试搜索”(是块前半部分的瓶颈或第二个?第一季度还是第二季度?等等)

如果您无法通过该类型的搜索找到热点,这很好地表明您在性能方面做得很好,并且更高的性能将需要重新考虑您的方法。

我不是开玩笑的,但你确定你在乎吗?如果代码只执行一次,它的相对性能可能是一个好奇的问题,而不是对最终用户有价值的东西。

于 2010-01-18T20:32:07.873 回答
0

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

于 2011-07-07T04:46:36.457 回答
0

它可以通过插入来完成,这里有一篇文章介绍了如何跟踪消息,您也许可以在它们执行的时间进行调整。

于 2009-10-02T13:36:38.183 回答