StopWatch (예 : Spring's StopWatch 또는 Commons' StopWatch)를 시뮬레이트하지만 최소, 최대 및 평균 시간을 제공하는 Java 클래스를 찾고 있습니다. 마지막 n 이상 평균 또한 바람직합니다.최소, 최대, 평균, ... 시간을 보여주는 스톱워치 클래스?
그런 것이 있습니까? 아니면 제가 직접 만드시겠습니까?
관련,
빔
StopWatch (예 : Spring's StopWatch 또는 Commons' StopWatch)를 시뮬레이트하지만 최소, 최대 및 평균 시간을 제공하는 Java 클래스를 찾고 있습니다. 마지막 n 이상 평균 또한 바람직합니다.최소, 최대, 평균, ... 시간을 보여주는 스톱워치 클래스?
그런 것이 있습니까? 아니면 제가 직접 만드시겠습니까?
관련,
빔
난 당신이 두 개념 분할해야한다고 생각 : 타이밍에 대한
두 개는 정말 별개의 물건 인 IMO입니다. 함께 테스트 할 때보 다 별도로 테스트하는 것이 훨씬 쉽습니다. 각기 다른 구성 요소에 대해 제 3 자 라이브러리를 찾을 수도있을 것입니다. 또는 기존의 StopWatch
클래스를 사용할 수도 있지만 직접 통계 cruncher를 작성하십시오.
Jon Skeet이 대답 한 내용을 따르면서, 다른 사람이 원할 경우를 대비하여 내 생각이 드러났습니다. 당신이 stopWatch.prettyPrint()
을 실행하면
public class StopWatch extends org.springframework.util.StopWatch
{
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
// ------------------------------ FIELDS ------------------------------
org.springframework.util.StopWatch.TaskInfo m_minimumTimeTask = null;
org.springframework.util.StopWatch.TaskInfo m_maximumTimeTask = null;
private final String m_id;
// --------------------------- CONSTRUCTORS ---------------------------
public StopWatch()
{
this("");
}
public StopWatch(String id)
{
super(id);
m_id = id;
}
@Override
public void setKeepTaskList(boolean keepTaskList)
{
throw new UnsupportedOperationException("The task list is always kept to be able to calculate the min, max and average");
}
// -------------------------- PUBLIC METHODS --------------------------
public long getMinimumTimeMillis()
{
if (m_minimumTimeTask != null)
{
return m_minimumTimeTask.getTimeMillis();
}
else
{
return -1;
}
}
public long getMaximumTimeMillis()
{
if (m_maximumTimeTask != null)
{
return m_maximumTimeTask.getTimeMillis();
}
else
{
return -1;
}
}
public void stop() throws IllegalStateException
{
super.stop();
updateMinimumTime();
updateMaximumTime();
}
public String shortSummary()
{
StringBuilder builder = new StringBuilder();
builder.append("StopWatch '").append(m_id)
.append("': running time (millis) = ").append(getTotalTimeMillis());
if (getTaskCount() > 0)
{
builder.append(LINE_SEPARATOR).append("-----------------------------------------").append(LINE_SEPARATOR);
builder.append("min: ").append(m_minimumTimeTask.getTimeMillis()).append(" ms (")
.append(m_minimumTimeTask.getTaskName()).append(")").append(LINE_SEPARATOR);
builder.append("max: ").append(m_maximumTimeTask.getTimeMillis()).append(" ms (")
.append(m_maximumTimeTask.getTaskName()).append(")").append(LINE_SEPARATOR);
builder.append("avg: ").append(getAverageTimeMillis()).append(" ms");
}
return builder.toString();
}
// -------------------------- PRIVATE METHODS --------------------------
private void updateMinimumTime()
{
if (m_minimumTimeTask == null)
{
m_minimumTimeTask = getLastTaskInfo();
}
else
{
if (getLastTaskTimeMillis() < m_minimumTimeTask.getTimeMillis())
{
m_minimumTimeTask = getLastTaskInfo();
}
}
}
private void updateMaximumTime()
{
if (m_maximumTimeTask == null)
{
m_maximumTimeTask = getLastTaskInfo();
}
else
{
if (getLastTaskTimeMillis() > m_maximumTimeTask.getTimeMillis())
{
m_maximumTimeTask = getLastTaskInfo();
}
}
}
public long getAverageTimeMillis()
{
if(getTaskCount() > 0)
{
return getTotalTimeMillis()/getTaskCount();
}
else
{
return -1L;
}
}
}
, 그것은 다음과 같이 :
StopWatch 'TestMinMaxAndAverage': running time (millis) = 1100
-----------------------------------------
min: 100 ms (run3)
max: 500 ms (run4)
avg: 275 ms
-----------------------------------------
ms % Task name
-----------------------------------------
00200 018% run1
00300 027% run2
00100 009% run3
00500 045% run4
은 스프링 프레임 워크에서 스톱워치 클래스를 사용하여