2013-09-17 9 views
1

Что такое способ рассчитать время (может быть в разряде) между двумя шагами в запущенной программе?Расчет разницы во времени между двумя операциями

Например:

algo() { 
    long time_1 = time_X 
    . 
    . 
    . 
    long time_2 = time_Y 

    difference = time_2 - time_1; 
} 

Я вычисления с помощью new GregorianCalendar().getTimeInMillis(). Но разница я получаю 0.

Есть ли способ узнать разницу между некоторыми шагами в любом алгоритме? Здесь я хочу знать разницу между первым и последним шагами алгоритма. Как раз перед тем, как алгоритм сделает окончательный возврат.

ответ

9

Для миллисекунд, используйте: System.currentTimeMillis() вместо:

long time_1 = System.currentTimeMillis(); 
. 
. 
. 
long time_2 = System.currentTimeMillis(); 

и вычитать. Для наносекундной точности используйте nanoTime. nanoTime не относится к системным часам, кроме внутреннего таймера, поэтому в течение 100 нс он может переходить от 120 до 220, от 100020 до 100120 и т. Д.

+0

и почему я получаю '0' при использовании' Gregorian Calendar'? –

+0

@SuhailGupta Я бы не знал, честно. Я предполагаю, что вы используете экземпляр по умолчанию, который идентичен следующему построенному. – hexafraction

+0

Ну, когда вы используете календарь, вы можете получить интерес только за несколько минут или секунд, метод getMilisecond существует только из-за всемирного собрания для измерения времени в миллисекундах, прошедших с 1.1.1970 (надеюсь, что дата правильная) – kajacx

1

Простой.

long time_1 = System.currentTimeMillis(); 
... 
long time_2 = System.currentTimeMillis(); 
difference = time_1 - time_2; 
System.out.println(difference + "milliseconds"); 

Очень полезно для оценки времени, затраченного функциями. Также, если вы хотите получить время в секундах, разделите разницу на 1000.

0

Возможно, вы захотите проверить Guava Stopwatch, если вы можете использовать сторонние библиотеки. Он может измерять время с разной степенью детализации и помогает отображать результат в хорошо усваиваемом формате.

0

System.nanoTime() более точный, чем System.currentTimeMillis().

Это то, что я использую для своих вычислений, когда мне нужно.

Не стесняйтесь проверить официальную документацию по API Java для получения подробной информации. Подводя итог:

Преимущество:

  • Времени в наносекундах
  • Довольно точные миллисекунды

Недостатки:

  • имеет реальное значение внутри один Время работы JVM (не сравнивайте nanoTimes между двумя разными JRE или двумя отдельными вызовами одной и той же JRE)
Смежные вопросы