所以我开始使用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);
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,我有一个开始时间,即每次打印声明和结束时间之间的时间.然后减去它以显示差异.但是没有区别,所有时间都是一样的.为什么会这样?
我正在考虑使用纳米时,但我真的不知道如何使用它,我听说它需要性能命中.
任何人都可以告诉我为什么我的时间是相同的,并建议一种方法来解决它或给我一个合适的替代路线得到答案?
你在这些行中开始捕捉所有的时间:
double thetime= System.currentTimeMillis();
double start= System.currentTimeMillis();
double end=System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
你得到的是相同的时间,因为这些线路是背靠背地执行的(并且快速呼叫很可能在不到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);
}
Run Code Online (Sandbox Code Playgroud)
注意如何将变量的声明移动到需要它们的位置.重要的是要注意变量赋值发生在声明时而不是在使用时,因此将调用移动到System.currentTimeMillis()您想要捕获当前时间的点是很重要的.
旁注:我将变量调整为long而不是double,因为System.currentTimeMillis()返回a long并且没有理由在double这里.