Иногда возникает потребность измерить время работы определенного фрагмента кода в вашем проекте.
Можно, конечно, писать так:
long start = System.currentTimeMillis(); //тут замеряемый код System.out.println(System.currentTimeMillis() - start); |
Но такой подход быстро надоедает. Я выделил замер времени в отдельный класс TimeMeter, теперь можно удобно останавливать несколько раз таймер и измерять время, если нужно измерить промежуточные значения. Можно также использовать несколько экземпляров таймера.
Реализация:
public class TimeMeter { private long start; private long stop; public TimeMeter(){ start = now(); } public void stop(){ stop = now(); } @Override public String toString() { return getDuration() + " msec"; } public long getDuration(){ return (stop == 0 ? now() : stop) - start; } private long now(){ return System.currentTimeMillis(); } } |
Самый простой вариант использования:
TimeMeter timeMeter = new TimeMeter(); //тут замеряемый код System.out.println(timeMeter); |
Таймер с несколькими остановками и замерами времени:
TimeMeter timeMeter = new TimeMeter(); //тут замеряемый код 1 timeMeter.stop(); System.out.println(timeMeter); //тут замеряемый код 2 timeMeter.stop(); System.out.println(timeMeter); |
Глобальный и внутренние таймеры:
TimeMeter totalTimeMeter = new TimeMeter(); for (int i = 0; i < 100; i++) { TimeMeter timeMeter = new TimeMeter(); //тут замеряемый код System.out.println("time " + i + ": " + timeMeter); } System.out.println("total time: " + totalTimeMeter); |
p.s. Можете придумать и сделать свою версию, здесь простор для творчества.