A veces necesario poder calcular el tiempo de ejecución de una parte del código. Ello puede ser porque estemos perfilando una aplicación o porque simplemente queramos dejar constancia de ello en algún fichero de log o en alguna consola de debugging.
En particular es algo que necesito muy a menudo así que lo tengo encapsulado en el siguiente método estática en una clase de utilidades:
public class Time {
/**
* @param initial Initial time in milliseconds.
* @return a message with the shape: "xxx seconds (YYY millis)"
*/
public static String getLapseTimeMessage(long initial) {
TimeUnit secondsUnit = TimeUnit.SECONDS;
TimeUnit millisUnit = TimeUnit.MILLISECONDS;
long timeLapse = System.currentTimeMillis() - initial;
long seconds = secondsUnit.convert(timeLapse, millisUnit);
long millis = millisUnit.convert(timeLapse, millisUnit);
return seconds + " seconds (" + millis + " millis)";
}
../..
}
Una clase cliente la utilizaría como sigue:
long initial = 0;
if (logger.isDebugEnabled()) {
initial = System.currentTimeMillis();
}
Parser parser=new ParserFactory().makeParser();
String text=this.programText;
this.program=parser.parse(text);//ParseException, IOException
logger.debug("Javascript parser needed " + Time.getLapseTimeMessage(initial));
Que dejaría una traza como la siguiente:
Javascript parser needed 1 seconds (1542 millis)
Obviamente esta es una aproximación muy básica que puede ser mejorada y más parametrizada, pero para casos sencillos cumple su cometido.
Advertisement
