C#에서 서브 밀리 초의 정확도로 타이밍 연산을 수행 할 수 있습니까? 나는 소프트웨어에 타이밍 코드를 넣었으며 모든 것이 0ms로 반환되고있다. 더 정밀한 세분성을 얻는 방법이 있는지 알고 싶습니다.C# sub millisecond timing
부록 : 서브 밀리 초 타이밍을 얻으려면 올바른 코드입니까?
timeSpan.TotalMilliseconds/10
나는 아직도 경과 시간
C#에서 서브 밀리 초의 정확도로 타이밍 연산을 수행 할 수 있습니까? 나는 소프트웨어에 타이밍 코드를 넣었으며 모든 것이 0ms로 반환되고있다. 더 정밀한 세분성을 얻는 방법이 있는지 알고 싶습니다.C# sub millisecond timing
부록 : 서브 밀리 초 타이밍을 얻으려면 올바른 코드입니까?
timeSpan.TotalMilliseconds/10
나는 아직도 경과 시간
당신은 항상 사용 System.Diagnostics.Stopwatch
.NET 2.0부터 QueryPerformanceCounter를 사용할 이유가 없습니다. 스톱워치는 내장되어 있으며 똑같은 기능을합니다. 두 타이머의 빈도는 완전히 동일합니다. –
실제로 그는 .NET 2.0을 사용하고 있다고 구체적으로 말하지 않았습니다. :) 다시 말해서 2.0+가 공정하다는 것을 지정하지 않았습니다. – tyranid
@tyranid, 기술적으로 그는 .NET을 지정하지 않았지만 그는 C#이라고 말했습니다. 이론적으로 그는 다른 C# 컴파일러 중 하나를 사용하여 다른 것으로 컴파일 할 수있었습니다 (JavaScript 및 FVM 바이트 코드로 컴파일 된 것을 보았습니다). –
에 대한 QueryPerformanceCounter 또는 StopWatch 클래스를 사용하여 시도 할 수 0 받고 있어요 연산을 여러 번 반복하여 (수 십 또는 백분의 수 밀리 초를 얻는 데 필요한만큼 많은 양의) 시나리오를 만듭니다.
그러면보다 쉽게 조정하고 측정 할 수 있습니다.
보통 내가 이런 종류의 측정 관리 방법
밀리 초 대신 틱의 성능을 측정 해 볼 수 있습니다. 그것은 성능면에서 훨씬 더 정확합니다.
하지만 Sam과 Tyranid에 동의하고 System.Diagnostics.StopWatch를 사용하십시오.
새로운 것을 배웠습니다. 그 틱은 참으로 편리합니다. 전체 예제는 : 내가 먼저 검색하고 변수에 넣어 그 이유는,
Stopwatch stopwatch = Stopwatch.StartNew();
// Run code to get duration of
long durationInTicks = stopwatch.ElapsedTicks;
Console.WriteLine($"Duration: {(decimal)durationInTicks/TimeSpan.TicksPerMillisecond:f3}ms");
또한 Console.WriteLine
내부 stopwatch.ElapsedTicks
를 사용할 수 있지만, 그 어떤 성능 지연이 있는지 모르겠어요.
잘못하고 있습니다. JIT, GC, 스레드 컨텍스트 전환, 다른 스레드가 사용 중일 때 등과 같이 너무 짧은 시간대에 영향을주는 너무 많은 것들이있을 것입니다. 문제를 확장하고, 수천 번 실행해야합니다. 또는 수만 번의 반복 작업을 수행하면됩니다. –
대신 프로파일 러 사용을 고려해보십시오. 몇 가지 상용 제품이 있으며 http://www.eqatec.com/tools/profiler에서 무료로 제공됩니다. – TrueWill