经过时间测量问题 - JAVA

时间:2018-05-08 17:13:08

标签: java android time

我正在Android上构建一个简单的游戏,我想检查某些功能的执行持续时间。

为此,我编写了一个类(TimeLog),在实例化时将System.nanotime()保存在Double字段上。该课程当然有一个end()方法,它减去了实例化到当前System.nanotime()时的时间。

问题在于,如果我尝试测量包含其他方法的方法的持续时间,有时内部方法比包含它们的方法花费更多时间来执行。我不明白我错在哪里。

以下是一个例子:

void myFunc(){
  TimeLog out = new TimeLog();
  inner1();
  inner2();
  out.end();
}

void inner1(){
  TimeLog in1 = new TimeLog();
  //something...
  in1.end();
}

void inner2(){
  TimeLog in2 = new TimeLog();
  //something...
  in2.end();
}


Main(){
  myFunc();
}

有时in1或in2返回的值高于out。

这是TimeLog:

public class Timelog
{

  private double startTime;
  private double duration;

  public TimeLog (){
    startTime = System.nanoTime();
  }

  public void end(){
    duration = (int)(System.nanoTime() - startTime);
  }

  public void log(){
    Log.d("TIMELOG", ":" + duration);
  }
}

1 个答案:

答案 0 :(得分:1)

首先,System.nanoTime()会返回long,而不是intdouble,因此您应该使用long进行正确的计算。我不确定这是否可以解决您的问题,如果没有,请发布示例输出。

编辑:您能否显示调用log()方法的部分?它不会在该代码中的任何地方调用。