iPhone应用程序是否有非采样时间分析工具?

iPhone应用程序是否有非采样时间分析工具?,iphone,profiling,Iphone,Profiling,我曾经尝试过Instruments和Shark来评测iPhone应用程序,但它们都使用数据采样方法,定期拍摄线程堆栈的截图 我更希望有一个全覆盖率分析工具,它可以记录每个函数调用以及在函数及其子例程中花费的时间。从直觉上看,这似乎比获取样本要好。像在Windows上玩AQtime之类的东西会很棒 因此,我的问题是: 基于样本的评测是否可以被信任,并且与基于函数调用的评测一样有用 仪器或Shark可以进行这种类型的分析吗 还有其他更接近我想要的工具吗 是的,堆栈采样可能违反直觉,是的,它是可信的。

我曾经尝试过Instruments和Shark来评测iPhone应用程序,但它们都使用数据采样方法,定期拍摄线程堆栈的截图

我更希望有一个全覆盖率分析工具,它可以记录每个函数调用以及在函数及其子例程中花费的时间。从直觉上看,这似乎比获取样本要好。像在Windows上玩AQtime之类的东西会很棒

因此,我的问题是:

  • 基于样本的评测是否可以被信任,并且与基于函数调用的评测一样有用
  • 仪器或Shark可以进行这种类型的分析吗
  • 还有其他更接近我想要的工具吗

  • 是的,堆栈采样可能违反直觉,是的,它是可信的。请看,以及第一条评论

    这不是问“这花了多长时间?”


    我发现Shark使用的时间分析非常准确,可以确定代码中的瓶颈是什么。通过使用
    Config | Show Mini-Config editor
    显示迷你配置编辑器并降低采样时间,可以将采样间隔调整为更细粒度

    Xcode 3.2中的仪器现在也有一个很好的时间分析器仪器,尽管它只是Mac。我发现仪器可以很好地进行分析,但是如果系统负载很重,它可能会丢失样本。一般来说,我从仪器开始,考虑到它的易用性,如果我需要更详细地了解正在发生的事情,那么就转到Shark

    如果你真的想做基于函数调用的评测,我会看看DTrace。我已经写了几篇关于使用DTrace和调优Cocoa应用程序的文章。后一个示例甚至显示了使用自定义DTrace脚本调整iPhone应用程序启动时间的示例


    不幸的是,DTrace目前并没有在iPhone上运行,但通过在模拟器中运行应用程序,您仍然可以使用它收集大量有趣的信息。虽然准确的定时信息与设备上的信息相差甚远,但准确地知道哪些方法执行了多少次以及以什么顺序执行,可以提供一些优化位置的线索。我使用DTrace提供对Shark和Instruments收集的信息的不同视角,并回答有关我的应用程序的特定问题。

    基于示例的评测并不一定比基于函数调用的评测更精确。基于函数调用的评测将使用比基于样本的评测更多的资源,这可能会产生在启用评测之前不存在的瓶颈。如果在堆栈采样速度较慢时采集堆栈样本,则不需要很多样本来查找“瓶颈”。定时精度不是问题。定位问题是关键。只需查找出现在>1示例上的呼叫站点地址。如果有任何一个你可以避免执行,你将得到一个有趣的加速,保证。。。。这显示了它的工作原理: