所以我开始使用System.currentTimeMillis();我试图测试我的两个方法之间的结果。我决定放弃我的方法,这样它的作用就不会妨碍我。基本上我没有看到任何时间的变化。我有这样的事情:
double start= System.currentTimeMillis();
double end=System.currentTimeMillis();
public void displayMethod()
{
System.out.println("The start time is" + start);
for (ITERATIONS AND STUFF)
{
System.out.format(STUFF BEING PRINTED);
}
System.out.println("The end time is" + end);
double difference = start-end;
System.out.println("The difference " + difference);
}
我的想法是,我有一个开始时间,即每次打印声明和结束时间之间的时间。然后减去它以显示差异。但是没有区别,所有时间都是一样的。为什么会这样?
我正在考虑使用纳米时代,但我真的不知道如何使用纳米时代,而且我听说它会影响性能。
任何人都可以告诉我为什么我的时间是相同的并建议一种方法 修复它或给我一个合适的替代路线得到 回答?
答案 0 :(得分:5)
您在开头的所有时间都使用以下几行:
double thetime= System.currentTimeMillis();
double start= System.currentTimeMillis();
double end=System.currentTimeMillis();
你得到的时间相同,因为这些线路是背靠背地执行的(快速呼叫很可能在不到1ms的时间内发生)
将代码调整为:
public void displayMethod()
{
long start= System.currentTimeMillis();
System.out.println("The start time is" + start);
for (ITERATIONS AND STUFF)
{
System.out.format(STUFF BEING PRINTED);
System.out.println(System.currentTimeMillis());
}
long end=System.currentTimeMillis();
System.out.println("The end time is" + end);
double difference = end-start;
System.out.println("The difference " + difference);
}
注意如何将变量的声明移动到需要它们的位置。重要的是要注意变量赋值在声明时发生而不是在使用时,因此将System.currentTimeMillis()
的调用移动到您想要的位置非常重要捕捉当前时间。
旁注:我将变量调整为long
而不是double
,因为System.currentTimeMillis()
返回long
并且没有理由double
在这里。
答案 1 :(得分:2)
你一开始就得到了所有的时间。您需要在想要知道时间的地方调用System.currentTimeMillis()。
答案 2 :(得分:0)
你应该调用currentTimeMillis减去开始时间,你想在那里找到总运行时间。