为什么traceview会给出不一致的测量结果?

时间:2012-07-15 18:34:04

标签: android profiling android-traceview

我正在尝试加快我的应用启动时间(由于Guice绑定缓慢,目前约为5秒),当我运行traceview时,我看到来自执行的测量中有很大的变化(高达30%)相同的代码。

我认为这是垃圾收集差异,但根据traceview在startGC中花费的时间是完全无关紧要的。

这尤其令人恼火,因为当测量值变化很大时,很难确定我的优化效果。

为什么会这样?有没有办法让测量更加一致?

3 个答案:

答案 0 :(得分:0)

我想您是从代码开始分析而不是手动打开它?但无论如何,即使您从代码的特定点使用Debug.startMethodTracingDebug.stopMethodTracing,您也会收到不同的测量结果。

您可以看到here Traceview禁用了JIT,我相信其他一些优化,因此在分析代码时执行的速度比没有它时要慢。您的代码性能也取决于整体系统负载。如果其他应用程序在后台执行任何繁重的操作,您的代码将执行更长时间。因此,您肯定会得到稍微不同的结果,因此启动时间不能是常数。

一般情况下,方法执行的时间长短并不重要,但与其他方法相比,它耗费了多少CPU时间。

答案 1 :(得分:0)

听起来测量不是你的最终目标。你的最终目标是让它更快。

这样做的方法是找出哪些活动占了很大一部分时间,这样你就可以找到更好的方法来做到这一点。 我说“找到”,而不是“测量”,我说“活动”,而不是“惯例”。

为此,只需要对程序的状态进行采样。 许多剖析器收集了程序状态的大量样本,但是它们都属于相同的逻辑 - 他们总结了理论,你想要的只是测量,而你并不真正关心什么。

事实上,如果不是获取摘要,您可以详细检查一些样本,它会告诉您更多有关该程序如何花费时间的信息。

更重要的是,如果只有两(2)个样本你可以看到该程序追求一些目标,并且你可以显着提高,你就会看到显着的加速。 这个过程可以重复多次,这就是真正优化它的方式。

更详细地解释了该过程here,并且有一个用例here

答案 2 :(得分:0)

如果您在启动时进行任何与网络相关的活动,那么此工具可以帮助您了解正在发生的事情以及如何优化连接和缓存。 http://developer.att.com/developer/legalAgreementPage.jsp?passedItemId=9700312