¿Qué es un camino limpio para la ejecución de código de tiempo en Java?

Marca :

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 AutoClosableque se supone que se utilizará (casi seguro)
  • Se crea una nueva instancia de TimeCodeque no es bueno
  • Las variables declaradas dentro del trybloque 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.
Joop Eggen:

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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=181098&siteId=1
Recomendado
Clasificación