Java 使用currentTimeMillis测量经过的时间返回0
我对Java/Android编程有点陌生,我只是想做一个简单的时间度量来计算我正在调用的方法的运行时间 现在,我的代码如下所示:Java 使用currentTimeMillis测量经过的时间返回0,java,android,performance,time,elapsedtime,Java,Android,Performance,Time,Elapsedtime,我对Java/Android编程有点陌生,我只是想做一个简单的时间度量来计算我正在调用的方法的运行时间 现在,我的代码如下所示: startTime = System.currentTimeMillis(); java_doubleinterp(args, ans); endTime = System.currentTimeMillis(); elapsed = endTime - startTime; setTex
startTime = System.currentTimeMillis();
java_doubleinterp(args, ans);
endTime = System.currentTimeMillis();
elapsed = endTime - startTime;
setTextview(ans);
方法java\u doubleinterp包含for循环,它是纯数学的,工作正常。输入为args,输出为ans。我没有返回任何内容,因为我试图将它的性能与使用C/C++(NDK)实现的类似函数进行比较,该函数是用MatLab自动生成的,具有这种结构
对于C/C++函数,我尝试以相同的方式测量时间,并得到相同的错误
在后面的代码中,我有以下内容:
Toast elapsedTime = Toast.makeText(getApplicationContext(),
"Elapsed time for " + lang + " code: \n" + (elapsed*1000)+ "\u03BCs",
Toast.LENGTH_LONG);
朗只是一根弦
这个祝酒词告诉我经过的时间是0秒(微秒)
在调试这个问题时,我显示了startTime和endTime,它们都显示了相同的值。为什么会这样
Obs:我尝试使用nanoTime()来获得时间和更高的精度,但结果是:
- 模拟器:大约50美元
- 电话(Nexus 4):0us或30us[没有意义]
编辑: 我在代码中做了一些更改,现在java方法看起来是这样的:
startTime = System.nanoTime();
java_doubleinterp(args, ans);
setTextview(ans);
endTime = System.nanoTime();
elapsed = endTime - startTime;
这是c函数(JNI)的一部分:
他们现在工作得很好。由于setTextview对于这两部分代码是相同的方法,所以绝对执行时间可能是错误的,但相对执行时间(java实现和JNI实现之间)是正常的
现在我得到的平均执行时间更有意义:
- 模拟器:3.75毫秒(Java)/6.59毫秒(JNI)
- Nexus4:1.11ms(Java)/0.82ms(JNI)
java\u doubleinterp
有副作用。副作用是什么意思?如果我将setTextview(ans)放在endTime之前,我会得到正确的值还是setTextview()的运行时间?它不是一个伪例程。它实际上是在做一些稍后显示的事情。我需要衡量这一点,因为我使用Java和C/C++(使用NDK)实现了这个例程。我想比较一下他们的表现。
startTime = System.nanoTime();
doubleinterp(args, ans);
setTextview(ans);
endTime = System.nanoTime();
elapsed = endTime - startTime;