Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时间测量问题-JAVA_Java_Android_Time - Fatal编程技术网

运行时间测量问题-JAVA

运行时间测量问题-JAVA,java,android,time,Java,Android,Time,我正在Android上构建一个简单的游戏,我想检查一些函数的执行时间 为此,我编写了一个类(TimeLog),在实例化时将System.nanotime()保存在一个双字段上。当然,这个类有一个end()方法,它减去实例化到当前System.nanotime()的时间 问题是,如果我试图测量包含其他方法的方法的持续时间,有时内部方法比包含它们的方法执行时间要长。我不明白我错在哪里 这里有一个例子: void myFunc(){ TimeLog out = new TimeLog();

我正在Android上构建一个简单的游戏,我想检查一些函数的执行时间

为此,我编写了一个类(
TimeLog
),在实例化时将
System.nanotime()
保存在一个双字段上。当然,这个类有一个
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();
}
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);
  }
}
有时in1或in2返回的值高于out

这是TimeLog:

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();
}
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);
  }
}

首先,
System.nanoTime()
返回一个
long
,而不是
int
double
,因此您应该使用
long
进行适当的计算。我不确定这是否能解决您的问题,如果不能,请发布一个示例输出


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

Wow。。。为什么要将长值转换为int,然后转换为double!?也许这就是问题的根源…@JayC667我认为System.nanotime()返回一个整数值。我的意思是,如果它返回的是纳秒,那么它们是非常大的整数而不是浮点数。那些“非常大的整数”基本上是一个
long
谢谢,我修改了我的代码(long而不是double),现在它返回“更好”的结果。这是个愚蠢的错误,但我看不出来。