Как я могу считать время, которое это берет функцию для завершения в Java?

Используйте коррелированный подзапрос

ДЕМО

select * from tablename a
where not exists (select 1 from tablename b where a.name=b.name having count(*)>1)

ВЫХОД:

id  name
2   Chad
4   Tim

50
задан Josep 30 January 2013 в 00:36
поделиться

8 ответов

long start = System.nanoTime();    
methodToBeTimed();
long elapsedTime = System.nanoTime() - start;
89
ответ дан Ande TURNER 7 November 2019 в 10:30
поделиться

Вот то, как может вычислить прошедшее время.

// Get current time
long start = System.currentTimeMillis();

// Do something ...

// Get elapsed time in milliseconds
long elapsedTimeMillis = System.currentTimeMillis()-start;

// Get elapsed time in seconds
float elapsedTimeSec = elapsedTimeMillis/1000F;

// Get elapsed time in minutes
float elapsedTimeMin = elapsedTimeMillis/(60*1000F);

// Get elapsed time in hours
float elapsedTimeHour = elapsedTimeMillis/(60*60*1000F);

// Get elapsed time in days
float elapsedTimeDay = elapsedTimeMillis/(24*60*60*1000F);
45
ответ дан Christian Stade-Schuldt 7 November 2019 в 10:30
поделиться
8
ответ дан Aaron Maenpaa 7 November 2019 в 10:30
поделиться

Профилировщик является правильным ответом, если у Вас есть больше чем одна функция.

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

Если Вы знаете, как сделать аспектно-ориентированное программирование, это - хороший способ сохранить код времени в одном месте и применить его декларативно. При использовании чего-то как Log4J для вывода значений, у Вас будет опция выключения или включения его. Это - профилировщик бедного человека.

Взгляните на AspectJ или AOP Spring.

6
ответ дан duffymo 7 November 2019 в 10:30
поделиться

System.nanoTime должен использоваться для точного измерения дельты между двумя разами для микросравнительных тестов.

public class CountTime {

  private static void walk() {
    for (int i = 0; i < Integer.MAX_VALUE; i++)
      ;
  }

  public static void main(String[] args) {
    long t0 = System.nanoTime();
    walk();
    long t1 = System.nanoTime();
    System.out.println("Elapsed time =" + (t1 - t0)
        + " nanoseconds");
  }

}

System.currentTimeMillis возвращает текущее время в миллисекундах. Можно использовать это для получения текущего времени. Это может быть полезно на более старом VMs или для более длительных рабочих процессов.

4
ответ дан McDowell 7 November 2019 в 10:30
поделиться

Все фрагменты кода выше имеют размеры, приблизительное время протекло со времени, метод был вызван ко времени, метод возвращается/бросает исключение. Такие методы не обращаются к планированию потоков, паузы, должные GC, и т.д.

Да, некоторые профилировщики сделают разумное задание.

При использовании Java 1.6 вперед можно использовать JMX базирующееся управление VM и контролирующий поддержку. Например, можно найти ThreadMXBean.getCurrentThreadCpuTime () значения. Вычисление различия этого значения прежде и после метода вызывает, даст Вам:

"... общее процессорное время для текущего потока в наносекундах. Возвращенное значение имеет точность наносекунд, но не обязательно точность наносекунд. Если реализация различает время непривилегированного режима и системное время режима, возвращенное процессорное время является количеством времени, которое текущий поток выполнил в непривилегированном режиме или системном режиме".

Если Ваш метод будет метать икру от рабочих потоков, то Ваше вычисление должно будет стать намного более тщательно продуманным ;-)

В целом я рекомендую разнюхать java.lang.mangement пакет.

5
ответ дан Dilum Ranatunga 7 November 2019 в 10:30
поделиться

Используйте любого System.currentTimeMillis () или System.nanoTime ():

int someMethod() {
    long tm = System.nanoTime();
    try {
        ...
    } finally {
        tm = System.nanoTime()-tm;
        System.out.println("time spent in someMethod(): " + tm + "ns");
    }
}
3
ответ дан Maurice Perry 7 November 2019 в 10:30
поделиться

Если Вы хотите получить текущее время, использовать java.util.Date.

-3
ответ дан Jakub Arnold 7 November 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: