StopWatch
클래스는 DateTime
클래스를 사용하여 대체되며 하드웨어가 고성능 카운터를 지원하지 않는 경우 측정에 틱을 사용합니다. 현재 대부분의 컴퓨터는 Windows 2000 이상에서 고성능 카운터를 가지고 있습니다. 이를 염두에두고 .NET Stopwatch
클래스는이 고주파수 타이머를 기반으로합니다. 일반적으로 Start
을 호출하면 성능 카운터를 쿼리하고 값을 저장합니다. Stop
때 성능 카운터를 다시 쿼리합니다. 그러면 경과 시간은이 두 값을 간단히 뺀 값이되어 ElapsedTicks
이됩니다. 여기
는
이 속성은 단지 GetRawElapsedTicks()
에 대한 호출이
public long ElapsedTicks {
get { return GetRawElapsedTicks(); }
}
아래의 기능이를 반환하게 ... 추가 설명을 위해 한 번 봐 가지고 몇 가지 항목입니다 스톱 워치가 시작된 때부터 스톱워치 Stop
메서드가 호출 될 때까지 경과 한 실제 시간. 위에서 언급 한 바와 같이 the elapsed time is a simple subtraction of those two values
은 아래 내용을 볼 수 있습니다 : currentTimeStamp - startTimeStamp
.
// Get the elapsed ticks.
#if FEATURE_NETCORE
public long GetRawElapsedTicks() {
#else
private long GetRawElapsedTicks() {
#endif
long timeElapsed = elapsed;
if(isRunning) {
// If the StopWatch is running, add elapsed time since
// the Stopwatch is started last time.
long currentTimeStamp = GetTimestamp();
long elapsedUntilNow = currentTimeStamp - startTimeStamp;
timeElapsed += elapsedUntilNow;
}
return timeElapsed;
}
이상은 #if FEATURE_NETCORE
입니다. 이상이 무엇인지 궁금 할 것입니다. 이를 전 처리기 명령이라고합니다. 기본적으로 그들은 if-else
문처럼 작동합니다. 조건이 충족되지 않으면 컴파일시에 미리 컴파일 결정이되고 런타임이 아니므로 코드가 컴파일시에 포함되지 않습니다.
이 모든 내용이 위에 언급되었습니다 Hans Passant는 JIT (Just in in-time) 컴파일에 관해 이미 알고 있습니다. 위에서 언급 한 모든 내용은 설명을 위해이를 더 자세히 설명합니다. 차이점의 실제 이유는 처음으로을 컴파일하고 실행하는 데 걸리는 시간입니다.
언급 할 또 다른 사항. stopwatch
클래스는 long
변수 유형을 사용하여 frequency
이라고하는 것을 저장합니다. 주파수 "는 고해상도 성능 카운터의 주파수를 저장하고, 그렇지 않으면 TicksPerSecond를 저장합니다.시스템이 실행되는 동안 빈도를 변경할 수 없으므로 한 번만 초기화됩니다.
다음은 주파수와 관련하여 많은 계산 방법을 가지고있는 constants
입니다. 당신이 StopWatch
클래스의 새 인스턴스를 만들 때
private const long TicksPerMillisecond = 10000;
private const long TicksPerSecond = TicksPerMillisecond * 1000;
이 실행되는 것입니다. 당신이 지금 볼 수
bool succeeded = SafeNativeMethods.QueryPerformanceFrequency(out Frequency);
if(!succeeded) {
IsHighResolution = false;
Frequency = TicksPerSecond;
tickFrequency = 1;
}
else {
IsHighResolution = true;
tickFrequency = TicksPerSecond;
tickFrequency /= Frequency;
}
주파수, 경과 시간 계산 될 것입니다 얼마나 자주 tick
이 발생할 것입니다 방법 을 설정에 큰 역할을한다. 응용 프로그램을 중지하더라도 현재 주파수가 저장되어 있어도 상관 없습니다. 유일한 방법은 주파수를으로 재설정하면 컴퓨터를 재부팅하는 것입니다.
이유는 'quicksort' 메소드의 코드와 관련이 있다고 가정합니다. – Blackwood
정말요? 나는 새로운 프로젝트 vb.net에서 다시 테스트했고 나는 매우 간단한 서브를 만든다. 같은 문제가 발생했습니다 !! 제가 서브를 확실하게 부를 때, 서브는 매우 간단하기 때문에 200 틱이 걸립니다. 그리고 내가 다시 그 잠수함을 부를 때, 단지 3 ticks 만 걸립니다. –
그런 다음 질문을 편집하여 매우 간단한 하위 항목을 포함하십시오. 그대로, 귀하의 질문에 답하기 위해 필요한 [Minimal, Complete, Verifiable Example] (http://stackoverflow.com/help/mcve)이 부족합니다. – Blackwood