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