2012-10-17 2 views
0

.Net은 System.Diagnostics.Stopwatch 클래스를 사용하는 고해상도 타이밍을 지원합니다. 이 클래스가 사용하는 특정 해상도는 기본 하드웨어에 따라 다르며 정적 속성 Stopwatch.Frequency을 통해 얻을 수 있음을 이해합니다.System.Diagnostics.Stopwatch 클래스의 타이머 해상도가 안정적입니까?

이 빈도는 CPU 빈도와 관련이 있으며 Stopwatch은이 값을 읽고 정적 초기화 프로그램/생성자 내의 정적 클래스 변수에 저장합니다. 따라서 CPU 클럭이 변경되면이 클래스가 잘못된 타이밍을보고하는지 궁금합니다. 예 : 시스템 부하에 따라 CPU 클럭을 변경하는 시스템

+1

아니요, 우연히 CPU 빈도 만 일치시킵니다. 어떤 마더 보드 디자이너도 가변 주파수를 선택하지 않습니다. –

답변

2

MSDN :

*The Frequency value depends on the resolution of the underlying timing mechanism. If the installed hardware and operating system support a high-resolution performance counter, then the Frequency value reflects the frequency of that counter. Otherwise, the Frequency value is based on the system timer frequency.*

Stopwatch.Frequency의 소스는 CPU 주파수 아니다. 고주파 하드웨어 카운터의 주파수입니다. 창문에서는이 카운터 주파수가 일반적으로 QueryPerformanceCounter function에 대한 호출로 읽혀지며, 리눅스에서는 High Resolution POSIX Timers이 고해상도 타이밍을 얻는 데 사용됩니다.

Time Stamp Counter의 사용 (RDTSC - CPU 주파수가) 종종 이러한 맥락에서 논의하지만, 실제 관련이 없습니다 :

일부 구형 하드웨어 타이밍 목적을 위해 CPU의 따라서 주파수를 어떤 고주파 하드웨어를 제공 할 수 없습니다를 대체품으로 사용됩니다. 타이밍을 위해 CPU 주파수를 사용할 때는 주파수가 일정하게 유지되어야합니다. 최신 하드웨어는 동적 CPU 주파수 수정을 제공합니다. 동적으로 수정되는 동안 CPU freqency를 측정 값으로 사용하면 작업이 끝납니다.

다행히도 이것은 non existing 상황입니다. CPU 주파수를 수정할 수있는 시스템이 더 현대적입니다. 이러한 최신 시스템에는 별도의 고주파 타이머 하드웨어 High Precision Event Timer도 있습니다.

멀티 코어 시스템에서 CPU 주파수 사용에 대한 소문이 있습니다. 실제로 특정 하드웨어에 문제가있었습니다. 그러나 그것은 오래 전이었고 얼마 동안 고정되었습니다.