Puede ser útil para la ejecución de código de tiempo para que sepa cuánto tiempo se toman las cosas. Sin embargo, creo que la forma común esto se hace descuidado ya que se supone que tienen el mismo sangrado, lo que hace que sea más difícil de leer lo que realmente está siendo programada.
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));
Un intento
Se me ocurrió lo siguiente, se ve mucho mejor, hay algunas ventajas y desventajas:
ventajas:
- Está claro que lo que se está programado debido a la sangría
- Se imprimirá automáticamente el tiempo que tomó algo después de la realización de código
desventajas:
- Esta no es la forma en
AutoClosable
que se supone que se utilizará (casi seguro) - Se crea una nueva instancia de
TimeCode
que no es bueno - Las variables declaradas dentro del
try
bloque están fuera de ella no es accesible
Se puede utilizar la siguiente manera:
try (TimeCode t = new TimeCode()) {
// The stuff you want to time
}
El código que hace esto posible es:
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));
}
}
La pregunta
Mi pregunta es:
- Es mi método realmente tan malo como creo que es
- ¿Hay una mejor manera de ejecución de código de tiempo en Java, donde se puede ver claramente lo que está siendo programado, o se me acaba de tener que conformarse con algo así como mi primer bloque de código.
Usted solución está muy bien.
Una forma menos expresiva sería para envolver su código para ser cronometrado en un lambda.
public void timeCode(Runnable code) {
...
try {
code.run();
} catch ...
}
...
}
timeCode(() -> { ...code to time... });
Usted probablemente como para atrapar las excepciones comprobadas y pasarlos a una cierta excepción de tiempo de ejecución o lo que sea.