在 Android 中测量执行时间的最佳方法?

2022-08-31 22:17:37

衡量Android代码片段执行时间的最佳方法是什么?

我在之前和之后都有一段代码,我想放置时间戳以找出它的执行时间(例如,一个在活动方法中,另一个在活动方法中)。onCreate()onDestroy()

我已经尝试过,但它只返回几秒钟给我(末尾有常量)。我还尝试了两个java函数:和。第一个返回毫秒的纪元时间,第二个则不返回。Time.toMillies(false)000System.currentTimeMillis()System.nanoTime()

测量执行时间并获得良好精度的最佳方法是什么?


答案 1

定时记录器呢?

来自定时记录器文档:

TimingLogger timings = new TimingLogger(YOUR_TAG, "methodA");
// ... do some work A ... 
timings.addSplit("work A");
// ... do some work B ... 
timings.addSplit("work B");
// ... do some work C ... 
timings.addSplit("work C");
timings.dumpToLog();

转储将如下所示:

     D/TAG     (3459): methodA: begin
     D/TAG     (3459): methodA:      9 ms, work A
     D/TAG     (3459): methodA:      1 ms, work B
     D/TAG     (3459): methodA:      6 ms, work C
     D/TAG     (3459): methodA: end, 16 ms

不要忘记通过运行以下命令来启用您的代码:adb shell setprop log.tag.YOUR_TAG VERBOSE


答案 2

衡量执行时间的最佳方法是什么

System.nanoTime()大概是个不错的选择。例如,杰克·沃顿(Jake Wharton)正在与雨果(Hugo)一起使用。

并获得良好的精度

这并非严格可行,因为当您的方法执行时,设备上可能发生任何事情。这些外部因素会通过窃取CPU时间,占用I / O通道等来影响您的时间测量。您需要对多次运行的测试进行平均,以尝试平均这些外部因素,因此准确性/精度将受到影响。

而且,正如Marcin Orlowski所指出的那样,要真正弄清楚为什么你消耗了一定的时间,请使用Traceview。


推荐