2010-04-06 1 views
9

나는 스톱워치에 대한 문 다음하게되는 interesting article에 링크를 발견 : 스톱워치가 실제로 고장 났습니까? <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx" rel="nofollow noreferrer">Stopwatch class</a>에 대한 MSDN 페이지에서

  • 이 여러 프로세서가 PC에 신뢰할 수 있습니다 :

    그러나 몇 가지 심각한 문제가있다. BIOS
    의 버그로 인해 이 올바른 결과를 얻으려면 동일한 프로세서에서 Start() 및 Stop()이 실행되어야합니다.

  • 이 일정한 시계 속도를 (대부분의 프로세서는 에너지를 절약하기 위해 클럭 속도를 감소시킬 수있다)이없는 프로세서에서 신뢰할 수없는 것입니다. 자세한 내용은 here에 설명되어 있습니다.

나는 조금 혼란 스러워요. 나는 스톱워치를 사용하는 tons of examples을 보았으며 아무도이 단점을 언급하지 않았다. 얼마나 심각한가? 스톱워치 사용을 피해야합니까?

답변

2

이 (가)으로 깨졌습니다. 대부분의 경우 (비공식 마이크로 벤치마킹 읽기) StopWatch은 비공식 테스트에 충분하기 때문에 사용하기에 괜찮습니다. 보다 공식적인 목적을 위해, 올바른 결과를 얻는 데 훨씬 많은 투자를하는 것처럼 자신의 계측 코드를 굴릴 가능성이 높습니다.

2

더 흥미로운 질문이 있습니다 : 조건이 중지 될지에서

  1. ()는 시작이 아닌 다른 프로세서에서 실행()?
    .
    대부분의 응용 프로그램 시나리오에서 대답은 "없음"입니다.

  2. 어떤 조건에서 측정 된 간격 동안 프로세서의 클럭 속도가 변경됩니까?
    .
    CPU를 많이 사용하는 벤치 마크에서는 "none"입니다.

+0

CPU 집중 벤치 마크의 경우에 맞을 것입니다. 하지만 비동기 IO의 경우에는 완전히 다를 수 있습니다. –

+0

첫 문장에 동의하지 않습니다. 나는 그 깨진 컴퓨터 중 하나를 가지고 있으며, 꽤 자주 나타났다. 심지어 시간이 거꾸로되어 게임을 추락 시켰습니다. – CodesInChaos

2

은 MSDN 문서의 정보를 참조하십시오 : 다중 프로세서 컴퓨터에서

, 스레드가 실행되는 프로세서 중요하지 않습니다. 그러나 BIOS 또는 HAL (하드웨어 추상화 계층)의 버그로 인해 서로 다른 프로세서에서 다른 타이밍 결과를 얻을 수 있습니다. 스레드에 대한 프로세서 선호도를 지정하려면 ProcessThread.ProcessorAffinity 메서드를 사용합니다.