如何创建方法来测量执行方法所需的时间



我知道如何测量方法执行和完成所需的时间。但是,如果我有 10 种不同的方法,并且我想测量 10 种方法中每种方法的运行时间,该怎么办?对我来说,继续写System.currentTimeMillis()二十次是低效的。

所以我只是想知道是否有更有效的方法来解决这个问题,即创建一个方法来测量特定方法运行所需的时间,并且该特定方法将作为参数传递(这是我头顶上的一个想法,我可能完全错了)?

long startTime = System.currentTimeMillis();
// Create graph and read file
Graph dag = new Graph();
read_file(dag, "FILE.txt");
long endTime = System.currentTimeMillis();
System.out.println("Load file: " + (endTime - startTime) + " milliseconds");
// Transposing graph
startTime = System.currentTimeMillis();
Graph dag_rev = new Graph();
Graph dag_transposed = dag_rev.transposed(dag);
endTime = System.currentTimeMillis();
System.out.println("Transposing graph: " + (endTime - startTime) + " milliseconds");

AOP,使用注释。 你只需要使用System.currentTimeMills(),但它确保你写一次,并根据需要多次使用它。这是Spring AOP的示例:http://www.mkyong.com/spring/spring-aop-examples-advice/不带弹簧 :http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.html

一个好的解决方案,虽然可能很难设置,是使用面向方面的编程并应用一些@Around(AspectJ注释)建议,将目标方法的执行与时间计算包装在一起。Spring 提供了一个简单的 AspectJ 实现。

另一种解决方案是提供一种类似

public static <T> T time(Callable<T> code) throws Exception { // possibly add a String message parameter to print out
    long startTime = System.currentTimeMillis();
    T value = code.call(); // or wrap unchecked exception
    long endTime = System.currentTimeMillis();
    System.out.println("Method executed: " + (endTime - startTime) + " milliseconds");
    return value;
}

然后将要执行的代码(包括方法调用)作为此方法的Callable传递

Graph graph = time(() -> {
    Graph dag = new Graph();
    read_file(dag, "FILE.txt");
    return dag;
});

(这几乎是AOP为您所做的简化。

相关内容

  • 没有找到相关文章

最新更新