2015-01-01 1 views
0

Я знаю, как измерить время, которое метод принимает для выполнения и завершения. Но что делать, если у меня есть 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"); 
+0

Как я знаю, нет другого способа, чтобы измерить время выполнения. Вы можете прочитать http://stackoverflow.com/questions/3382954/measure-execution-time-for-a-java-method –

ответ

1

АОП, используйте аннотации. вам нужно использовать только 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

2

Хорошее решение, хотя, возможно, трудно установить, является использование Аспект-ориентированное программирование и применить некоторые @Around (аннотацию AspectJ) совет, который оборачивает выполнение целевого метода с расчетом времени. Spring provides a simple implementation with 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; 
}); 

(Это в значительной степени упрощение того, что АОП сделает для вас.)

 Смежные вопросы

  • Нет связанных вопросов^_^