programing tip

스톱워치 대 System.DateTime.Now를 사용하여 타이밍 이벤트

itbloger 2020. 9. 4. 07:01
반응형

스톱워치 대 System.DateTime.Now를 사용하여 타이밍 이벤트


이 질문에 이미 답변이 있습니다.

내 코드의 성능을 추적하고 싶었 기 때문에 System.DateTime.Now. 코드를 실행하는 시간으로 둘의 차이를 고려했습니다.

나는 그 차이가 정확하지 않은 것 같았다. 그래서 나는 Stopwatch물건을 사용해 보았습니다 . 이것은 훨씬 더 정확한 것으로 판명되었습니다.

누구든지 Stopwatch시작 시간과 종료 시간의 차이를 계산하는 것보다 더 정확 System.DateTime.Now할까요?

BTW, 나는 1/10 퍼센트에 대해 말하는 것이 아닙니다. 약 15-20 % 차이가 있습니다.


MSDN :

스톱워치는 기본 타이머 메커니즘에서 타이머 틱을 계산하여 경과 시간을 측정합니다. 설치된 하드웨어 및 운영 체제가 고해상도 성능 카운터를 지원하는 경우 Stopwatch 클래스는 해당 카운터를 사용하여 경과 시간을 측정합니다. 그렇지 않으면 Stopwatch 클래스는 시스템 타이머를 사용하여 경과 시간을 측정합니다. Frequency 및 IsHighResolution 필드를 사용하여 스톱워치 타이밍 구현의 정밀도와 해상도를 결정합니다.

보다 높은 해상도 / 정밀도를 사용합니다 DateTime.Now.

다음과 같은 관련 링크를 확인할 수도 있습니다.

Environment.TickCount 대 DateTime.Now

DateTime.Now는 함수의 성능을 측정하는 가장 좋은 방법입니까?

DateTime아마도 두 번째 정밀도에 충분하지만 내가 권장하는 그 이상의 것은 무엇이든 좋습니다 StopWatch.


DateTime 값을 빼는 것보다 훨씬 정확하기 때문에 Stopwatch 클래스를 사용하는 것이 좋습니다.

Stopwatch s = Stopwatch.StartNew();
// Tested code here
s.Stop();
Console.WriteLine("Elapsed Time: {0} ms", s.ElapsedMilliseconds);

안타깝게도이 간단한 코드로는 대부분의 경우 정확한 측정을하기에 충분하지 않습니다. OS 내부에서 많은 활동이 진행되어 CPU 시간을 훔치고 코드 실행 속도를 늦출 수 있기 때문입니다. 그렇기 때문에 테스트를 여러 번 실행 한 다음 가장 낮은 시간과 가장 높은 시간을 제거하는 것이 가장 좋습니다. 그 강아지의 경우 테스트 된 코드를 여러 번 실행하고 가장 낮은 시간과 가장 큰 시간을 제거하고 평균 시간을 계산하는 방법을 사용하는 것이 좋은 솔루션입니다. 내가 게시 한 내 블로그에서 샘플 시험 방법을 .


타이밍 함수 성능 링크는 정확한 문제, 특히이 단락에 대해 설명합니다.

문제는 MSDN에 따르면 DateTime.Now 함수의 해상도가 10 밀리 초 이상이므로 두 번 호출해야한다는 것입니다! 따라서 런타임 측정에서 20ms 이상의 스윙이 발생합니다. 우리의 함수 호출은 종종이 20ms 창보다 훨씬 더 빨리 반환 될 가능성이 있기 때문에 이것만으로는 충분하지 않습니다.

편집 : 그것은 두 번째 DateTime처럼 들리며 스톱워치 메서드가 끝날 때와 다른 시간에 호출되고 있습니다.

참고 URL : https://stackoverflow.com/questions/2923283/stopwatch-vs-using-system-datetime-now-for-timing-events

반응형