它可以很方便地为代码执行计时,这样您就知道需要多长时间。但是,我发现这是草率完成的常见方式,因为它应该具有相同的缩进,这使得阅读实际计时的内容变得更加困难。
long start = System.nanoTime();
// The code you want to time
long end = System.nanoTime();
System.out.printf("That took: %d ms.%n", TimeUnit.NANOSECONDS.toMillis(end - start));
一次尝试
我想出了以下,它看起来好多了,有一些优点和缺点:
好处:
- 由于缩进,很明显正在计时
- 它会自动打印代码完成后需要多长时间
缺点:
- 这不是
AutoClosable
应该使用的方式(很确定) - 它创建了一个
TimeCode
不好的新实例 - 块内声明的变量在
try
块外不可访问
它可以这样使用:
try (TimeCode t = new TimeCode()) {
// The stuff you want to time
}
使这成为可能的代码是:
class TimeCode implements AutoCloseable {
private long startTime;
public TimeCode() {
this.startTime = System.nanoTime();
}
@Override
public void close() throws Exception {
long endTime = System.nanoTime();
System.out.printf("That took: %d ms%n",
TimeUnit.NANOSECONDS.toMillis(endTime - this.startTime));
}
}
问题
我的问题是:
- 我的方法真的有我想的那么糟糕吗
- 有没有更好的方法来计时 Java 中的代码执行,您可以清楚地看到正在计时的内容,或者我只需要满足于我的第一个代码块之类的东西。