스톱워치 대 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
'programing tip' 카테고리의 다른 글
잘못된 응용 프로그램 경로 (0) | 2020.09.04 |
---|---|
$ (document.body)와 $ ( 'body') JQuery의 차이점 (0) | 2020.09.04 |
일부 플랫폼에서는 char **, 다른 플랫폼에서는 const char **를받는 C ++ 함수를 이식 가능하게 호출 할 수있는 방법은 무엇입니까? (0) | 2020.09.04 |
scala.concurrent.Promise의 사용 사례는 무엇입니까? (0) | 2020.09.04 |
except 블록을 테스트하기 위해 Exception을 발생시키는 함수 모킹 (0) | 2020.09.04 |