C# 如何将秒表刻度转换为纳秒、毫秒和秒?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2329079/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do you convert Stopwatch ticks to nanoseconds, milliseconds and seconds?
提问by Scott Davies
This is a very basic question...quite embarassing, but here goes:
这是一个非常基本的问题......很尴尬,但这里是:
I have a Stopwatch block in C# code. I determine the elapsed time in ticks and then want to convert to ns, ms, s. I know that the Frequency is provided by the Stopwatch class and that it is required for conversion.
我在 C# 代码中有一个秒表块。我以滴答为单位确定经过的时间,然后想转换为 ns、ms、s。我知道频率是由秒表类提供的,并且它是转换所必需的。
Thanks
谢谢
采纳答案by RedFilter
Stopwatch.Elapsed is a TimeSpan, so you can do myStopwatch.Elapsed.TotalMilliseconds, myStopwatch.Elapsed.TotalSeconds, etc.
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);
Output:
输出:
Time elapsed (s): 2.4976622
Time elapsed (ms): 2497.6622
Time elapsed (ns): 2497662200
Notethat stopwatch.ElapsedMillisecondsreturns a longand is thus only precise up to the millisecond, while stopwatch.Elapsed.TotalMillisecondsreturns a doubleand has the same precisionas stopwatch.ElapsedTicks, except it's easier to use. ILSpy shows that TimeSpan.TotalMillisecondsis computed using ticks anyway.
注意的是stopwatch.ElapsedMilliseconds回报long,因此只精确到毫秒,而stopwatch.Elapsed.TotalMilliseconds回报double和具有相同的精度为stopwatch.ElapsedTicks,但它更容易使用。ILSpy 显示TimeSpan.TotalMilliseconds无论如何都是使用刻度计算的。
回答by Zach Johnson
According to MSDN, Frequency tells you the number of ticks per second. Therefore:
根据MSDN,频率告诉您每秒的滴答数。所以:
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;
回答by John Weldon
From the MSDN docs:
从MSDN 文档:
Use the Frequencyand IsHighResolutionfields to determine the precision and resolution of the Stopwatch timing implementation.
使用Frequency和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);
回答by Reed Copsey
Stopwatch.Frequencygives you ticks/second.
秒表。频率为您提供滴答/秒。
So, if you have ticks, you can just divide by frequency to get seconds:
所以,如果你有刻度,你可以用频率除以得到秒数:
long ticks = sw.ElapsedTicks;
double ns = 1000000000.0 * (double)ticks / Stopwatch.Frequency;
double ms = ns / 1000000.0;
double s = ms / 1000;
For example, you can do:
例如,您可以执行以下操作:
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();
}
Which, on my system, prints:
其中,在我的系统上,打印:
3455650175.58075, 3455.65017558075, 3.45565017558075
回答by Kornél Regius
Use this class:
使用这个类:
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;
}
}
Then you can get the elapsed nanoseconds/microseconds just like this:
然后你可以像这样获得经过的纳秒/微秒:
var stopwatch = Stopwatch.StartNew();
//... measured code part
Console.WriteLine(stopwatch.ElapsedNanoSeconds());
// OR
Console.WriteLine(stopwatch.ElapsedMicroSeconds());
For milliseconds you can use the ElapsedMilliseconds() method of Stopwatch.
对于毫秒,您可以使用秒表的 ElapsedMilliseconds() 方法。

