是否有适用于 iPhone 应用程序的非采样时间分析工具?
Posted
技术标签:
【中文标题】是否有适用于 iPhone 应用程序的非采样时间分析工具?【英文标题】:Are there non-sampling time-profiling tools for iPhone apps? 【发布时间】:2009-09-18 05:43:13 【问题描述】:我曾尝试使用 Instruments 和 Shark 来分析 iPhone 应用,但两者都使用数据采样方法,通过定期截取线程堆栈的屏幕截图。
我希望有一个全面覆盖的分析工具,它可以记录每个函数调用以及函数及其子例程所花费的时间。这在直觉上似乎比获取样本更好。像 Windows 上的 AQtime 这样的东西会很棒。
所以我的问题是:
-
是否可以信任基于样本的分析并且与基于函数调用的分析一样有用?
Instruments 或 Shark 可以进行这种类型的分析吗?
是否有其他可用的工具,更接近我想要的?
【问题讨论】:
基于样本的分析不一定不如基于函数调用的分析准确。基于函数调用的分析将使用比基于样本更多的资源,并且可能会产生在启用分析之前不存在的瓶颈。 如果堆栈样本是在缓慢的情况下进行的,那么您不需要很多样本来找到您的“瓶颈”。计时精度不是问题。定位问题是问题所在。只需查找出现在 >1 个样本上的呼叫站点地址即可。如果您可以避免执行其中的任何一项,那么您将获得巨大的加速,保证。 ...这显示了它是如何工作的:***.com/questions/406760/… 【参考方案1】:我发现 Shark 使用的时间分析对于确定代码中的瓶颈非常准确。您可以通过使用 Config | Show Mini Config Editor
显示 Mini Config 编辑器并降低采样时间来将采样间隔调整为更细粒度。
Xcode 3.2 中的仪器现在也有一个不错的 Time Profiler 仪器,尽管它仅适用于 Mac。我发现 Instruments 可以很好地进行分析,但如果系统负载过重,它可能会丢弃样本。一般来说,我从 Instruments 开始,考虑到它的易用性,然后如果我需要更详细地了解正在发生的事情,我会转向 Shark。
如果您真的想做基于函数调用的分析,我会考虑 DTrace。我写了几篇关于使用 DTrace here 和 here 调整 Cocoa 应用程序的文章。后一个甚至显示了使用自定义 DTrace 脚本调整 iPhone 应用程序启动时间的示例。
不幸的是,DTrace 目前不能在 iPhone 本身上运行,但您仍然可以通过在模拟器中运行您的应用程序来收集很多有趣的信息。虽然确切的时间信息与设备上的信息相去甚远,但确切地知道哪些方法被执行了多少次以及以什么顺序可以提供一些关于在哪里进行优化的线索。我使用 DTrace 对 Shark 和 Instruments 收集的信息提供不同的视角,并回答有关我的应用程序的具体问题。
【讨论】:
【参考方案2】:是的,堆栈采样可能是违反直觉的,是的,它是值得信赖的。看this link,还有第一条评论。
这不是问“这需要多长时间?”
这是关于问(用怀疑的声音)“那纳秒有必要吗?”
【讨论】:
以上是关于是否有适用于 iPhone 应用程序的非采样时间分析工具?的主要内容,如果未能解决你的问题,请参考以下文章
如何支持适用于 iPhone、iPad 和 iPad Mini 的 iOS 应用程序