我正在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);
}
}
答案 0 :(得分:1)
首先,System.nanoTime()
会返回long
,而不是int
或double
,因此您应该使用long
进行正确的计算。我不确定这是否可以解决您的问题,如果没有,请发布示例输出。
编辑:您能否显示调用log()
方法的部分?它不会在该代码中的任何地方调用。