1

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

我会假设这是来自垃圾收集的差异,但startGC根据 traceview 花费的时间完全是微不足道的。

这尤其令人恼火,因为当测量值如此多变时,很难确定我的优化会产生什么影响。

为什么会这样?有什么方法可以使测量结果更加一致?

4

3 回答 3

0

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

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

通常,与其他方法相比,您的方法执行多长时间并不重要,而是消耗多少 CPU 时间。

于 2012-07-15T19:06:45.640 回答
0

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

于 2012-07-16T10:27:39.530 回答
0

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

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

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

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

更重要的是,如果在少至两 (2) 个样本上,您可以看到程序追求某个目标,并且您可以显着改进它,您会看到显着的加速。这个过程可以重复多次,这样才能真正优化它。

这个过程在这里有更详细的解释,这里一个用例。

于 2012-07-15T20:03:08.193 回答