Mar*_*ark 5 java timing autocloseable
时间代码执行可能很方便,所以您知道事情要花多长时间。但是,我发现这样做的一般方法很草率,因为它应该具有相同的缩进,这使得读取实际计时内容变得更加困难。
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));
Run Code Online (Sandbox Code Playgroud)
我提出以下内容,它看起来更好,但有一些优点和缺点:
好处:
缺点:
AutoClosable应该使用的方式(很确定)TimeCode不好的新实例try块内声明的变量不能在块外访问可以这样使用:
try (TimeCode t = new TimeCode()) {
// The stuff you want to time
}
Run Code Online (Sandbox Code Playgroud)
使之成为可能的代码是:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
你的解决方案很好。
一种表达性较差的方法是将要计时的代码包装在 lambda 中。
public void timeCode(Runnable code) {
...
try {
code.run();
} catch ...
}
...
}
timeCode(() -> { ...code to time... });
Run Code Online (Sandbox Code Playgroud)
您可能希望捕获已检查的异常并将它们传递给某些运行时异常或其他异常。
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |