我正在尝试计算方法在我的应用程序中花费多长时间,问题是时间总是显示0秒。我的代码有什么问题?
long currentTimeInMilis = System.currentTimeMillis() % 1000;
public ClassName() {
public void timeMethod() {
long startOfmethod= currentTimeInMilis;
methodToTime();
long endOfMethod= currentTimeInMilis;
long totalTime = endOfMethod= - startOfmethod;
LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");
}
}
问题是我每次都会得到这个输出,尽管我知道它的耗时超过零秒:
Method took: 0:0:0:
答案 0 :(得分:4)
您之前和之后使用相同的currentTimeInMilis
变量。在此期间,它并不像是神奇地改变它的东西(好吧,除非methodToTime
,否则,因为你已经把它变成了一个字段而不是一个局部变量)。在方法完成后,您必须再次再次调用 System.currentTimeMillis()
,以便获得一个可以与调用方法之前的值进行比较的值。
例如,完全摆脱currentTimeInMilis
字段,并查看下面的***
:
public ClassName() {
public void timeMethod() {
long startOfmethod = System.currentTimeMillis(); // ***
methodToTime();
long endOfMethod = System.currentTimeMillis(); // ***
long totalTime = endOfMethod = -startOfmethod;
LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");
}
}
请注意,我也删除了% 1000
;只记住值的毫秒部分是没有意义的。
然而,请注意,这仅适用于非常非常粗略的指示(您已经说过该方法需要两分钟)。有关正确的基准测试,请参阅How do I write a correct micro-benchmark in Java?