我想测量只运行一次的 iPhone 上代码的性能,因此 Instrument 的 CPU 采样器工具的用途有限,因为它需要多次迭代才能收集到足够的样本。
有没有一种工具可以让我在每次调用时使用每个函数的时间?那确实调用跟踪而不是统计抽样?
问候, 约臣
我想测量只运行一次的 iPhone 上代码的性能,因此 Instrument 的 CPU 采样器工具的用途有限,因为它需要多次迭代才能收集到足够的样本。
有没有一种工具可以让我在每次调用时使用每个函数的时间?那确实调用跟踪而不是统计抽样?
问候, 约臣
问题“是否有适用于 iPhone 应用程序的非采样时间分析工具?” 与您要问的类似。在我的回复中,我指出了 DTrace,它可以进行基于函数调用的分析,但不幸的是只能在模拟器中工作,而不是在实际设备上工作。您还可以使用 Shark 收集数据,采样间隔足够小。
最后,如下代码可用于在应用程序中进行代码执行计时:
CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();
// Your code here
elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"Elapsed time in seconds: %f", elapsedTime);
如果你有一些大块的代码在一次调用时执行不可接受,那么很有可能它要么有一些耗时的循环,要么你调用了一些低效的低级函数。循环控制结构应该很容易通过检查找到,并且通过手动计时 CGAbsoluteTimeGetCurrent() 和“二进制调试搜索”(是块前半部分的瓶颈或第二个?第一季度还是第二季度?等等)
如果您无法通过该类型的搜索找到热点,这很好地表明您在性能方面做得很好,并且更高的性能将需要重新考虑您的方法。
我不是开玩笑的,但你确定你在乎吗?如果代码只执行一次,它的相对性能可能是一个好奇的问题,而不是对最终用户有价值的东西。
Pulse 工程团队最近发表了一篇关于如何衡量 Objective-c 代码单行(或多行)性能的文章:http: //eng.pulse.me/line-by-line-speed-analysis-for-ios -应用/
它可以通过插入来完成,这里有一篇文章介绍了如何跟踪消息,您也许可以在它们执行的时间进行调整。