스톱워치 틱을 나노초, 밀리 초 및 초로 어떻게 변환합니까?
이것은 매우 기본적인 질문입니다 ... 상당히 당황 스럽지만 여기에 있습니다.
C # 코드에 스톱워치 블록이 있습니다. 경과 시간을 틱 단위로 결정한 다음 ns, ms, s로 변환하고 싶습니다. Frequency는 Stopwatch 클래스에서 제공하며 변환에 필요하다는 것을 알고 있습니다.
감사
Stopwatch.Elapsed는이다 타임 스팬 , 당신이 할 수 있도록 myStopwatch.Elapsed.TotalMilliseconds
, myStopwatch.Elapsed.TotalSeconds
등
// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();
// Begin timing
stopwatch.Start();
// Do something
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(1);
}
// Stop timing
stopwatch.Stop();
// Write result
Console.WriteLine("Time elapsed (s): {0}", stopwatch.Elapsed.TotalSeconds);
Console.WriteLine("Time elapsed (ms): {0}", stopwatch.Elapsed.TotalMilliseconds);
Console.WriteLine("Time elapsed (ns): {0}", stopwatch.Elapsed.TotalMilliseconds * 1000000);
산출:
Time elapsed (s): 2.4976622
Time elapsed (ms): 2497.6622
Time elapsed (ns): 2497662200
참고 것을 stopwatch.ElapsedMilliseconds
리턴 long
하고, 따라서 밀리 초 만 정확한까지이며, 반면 stopwatch.Elapsed.TotalMilliseconds
리턴한다 double
와 같은 정밀도가 등을 stopwatch.ElapsedTicks
가 사용하기 쉽게 제외. ILSpy는 TimeSpan.TotalMilliseconds
어쨌든 틱을 사용하여 계산 된 것을 보여줍니다 .
MSDN 에 따르면 Frequency는 초당 틱 수를 알려줍니다. 따라서:
Stopwatch sw = new Stopwatch();
// ...
double ticks = sw.ElapsedTicks;
double seconds = ticks / Stopwatch.Frequency;
double milliseconds = (ticks / Stopwatch.Frequency) * 1000;
double nanoseconds = (ticks / Stopwatch.Frequency) * 1000000000;
Stopwatch.Frequency 는 초당 틱 수를 제공합니다.
따라서 틱이있는 경우 빈도로 나누면 초를 얻을 수 있습니다.
long ticks = sw.ElapsedTicks;
double ns = 1000000000.0 * (double)ticks / Stopwatch.Frequency;
double ms = ns / 1000000.0;
double s = ms / 1000;
예를 들어 다음을 수행 할 수 있습니다.
static void Main()
{
Stopwatch sw = new Stopwatch();
sw.Start();
System.Threading.Thread.Sleep(3456);
sw.Stop();
long ticks = sw.ElapsedTicks;
double ns = 1000000000.0 * (double)ticks / Stopwatch.Frequency;
double ms = ns / 1000000.0;
double s = ms / 1000;
Console.WriteLine("{0}, {1}, {2}", ns, ms, s);
Console.ReadKey();
}
내 시스템에서 다음을 인쇄합니다.
3455650175.58075, 3455.65017558075, 3.45565017558075
이 클래스 사용 :
public static class Utility
{
public static long ElapsedNanoSeconds(this Stopwatch watch)
{
return watch.ElapsedTicks * 1000000000 / Stopwatch.Frequency;
}
public static long ElapsedMicroSeconds(this Stopwatch watch)
{
return watch.ElapsedTicks * 1000000 / Stopwatch.Frequency;
}
}
그러면 다음과 같이 경과 된 나노초 / 마이크로 초를 얻을 수 있습니다.
var stopwatch = Stopwatch.StartNew();
//... measured code part
Console.WriteLine(stopwatch.ElapsedNanoSeconds());
// OR
Console.WriteLine(stopwatch.ElapsedMicroSeconds());
밀리 초 동안 Stopwatch의 ElapsedMilliseconds () 메서드를 사용할 수 있습니다.
로부터 MSDN의 문서 :
사용 주파수 및 IsHighResolution는 스톱워치 타이밍 구현의 정밀도와 해상도를 결정하는 필드.
long frequency = Stopwatch.Frequency;
Console.WriteLine(" Timer frequency in ticks per second = {0}",
frequency);
long nanosecPerTick = (1000L*1000L*1000L) / frequency;
Console.WriteLine(" Timer is accurate within {0} nanoseconds",
nanosecPerTick);
Elapsed
속성 사용 :
stopwatch.Elapsed.TotalMilliseconds
'IT TIP' 카테고리의 다른 글
iPhone에서 네트워크 트래픽을 어떻게 모니터링합니까? (0) | 2020.12.02 |
---|---|
TextBlock의 WPF 형식 DateTime? (0) | 2020.12.02 |
Mac 또는 Mac OS X에서 localhost 폴더는 어디에 있습니까? (0) | 2020.12.02 |
CURRENT_TIMESTAMP (밀리 초) (0) | 2020.12.02 |
PHP 대 템플릿 엔진 (0) | 2020.12.02 |