【问题标题】:iPhone performance measurement for code that only runs once?只运行一次的代码的 iPhone 性能测量?
【发布时间】:2010-12-03 05:58:57
【问题描述】:

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

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

问候, 乔辰

【问题讨论】:

  • CPU采样工具是否需要多个重复实例?这意味着它会一遍又一遍地触发代码进行基准测试?还是它只是倾听然后衡量执行?因为除非你有 500 部 iPhone,否则你可能只想卸载代码重新测试,对吧?
  • 感谢大家提供不同方法来衡量执行时间的建议——我没有接受其中任何一种,因为没有提到任何工具(按要求),因此人们应该选择最好的解决方案为他们。

标签: iphone performance xcode instruments


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我正在跟踪启动代码,这些启动代码本质上只在应用程序启动时运行一次。但是,对于用户来说,启动需要 2 秒而不是 10 秒确实很重要。
    【解决方案3】:

    "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);
    

    【讨论】:

    • 感谢您的回答。我现在正在这样做,但是有一个工具会很好......
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多