如何在不减慢执行速度的情况下分析 Android 应用程序的执行?

Posted

技术标签:

【中文标题】如何在不减慢执行速度的情况下分析 Android 应用程序的执行?【英文标题】:How to profile execution of Android apps without slowing down execution? 【发布时间】:2014-01-28 14:37:33 【问题描述】:

我有兴趣了解 CPU 在运行我的应用程序时的每次运行时间。

我知道 tracedump 方法分析或使用 ddms,但它似乎大大减慢了应用程序的速度,使分析不准确。

是否有任何工具,例如每隔几毫秒对应用程序的执行进行一次采样,以便我们可以在没有太多性能开销的情况下分析我们的应用程序?

【问题讨论】:

分析应该相对准确。 IOW,如果方法 A 在方法跟踪打开时比方法 B 花费的时间多 33%,则在方法跟踪关闭时方法 A 应该比方法 B 多花费约 33% 的时间。一个值得注意的例外是native 方法,因为方法跟踪不会下降到本机代码中,因此相比之下,方法跟踪会使 Dalvik 代码看起来更糟糕。 @CommonsWare 如果方法 A 包含大部分没有调用方法的迭代循环但方法 B 包含深度方法调用,它仍然有效吗?因为当方法分析处于活动状态时,B 可能会遭受大量分析开销,因此执行 B 的总时间会比 A 多得多。 这部分取决于分析器的实现。 【参考方案1】:

分析工具不计算它们自己花费的时间。因此,唯一的不准确之处在于在您的代码和工具代码之间传输控制权的开销很小。

【讨论】:

以上是关于如何在不减慢执行速度的情况下分析 Android 应用程序的执行?的主要内容,如果未能解决你的问题,请参考以下文章

在不减慢线程速度的情况下保存大量数据

循环内的 Java 执行时间峰值

如何在 UNIX/Linux 中对生产应用程序进行核心转储分析?

并行调用会减慢分析器的速度吗?

如何“减慢” MIDI 文件(最好在 Python 中)?

Android NDK - 多线程正在减慢渲染速度