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.ElapsedMilliseconds
returns a long
and is thus only precise up to the millisecond, while stopwatch.Elapsed.TotalMilliseconds
returns a double
and has the same precisionas stopwatch.ElapsedTicks
, except it's easier to use. ILSpy shows that TimeSpan.TotalMilliseconds
is 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() 方法。