2009-09-17 74 views

回答

6

,但也不能保证该值有什么与实时相关 - 例如,它可能是“自计算机启动以来的滴答声”。对于-高分辨率定时器,您可以使用new DateTime(Stopwatch.GetTimestamp()),但这不一定会为高分辨率定时器提供有用的值。 (它肯定不在我的盒子里。)

你想用这个做什么? Stopwatch的想法是测量间隔的时间。

+0

想问为什么“不相关”?操作系统的时钟周期是不变的,所以在任何时钟(间隔)上,100毫秒应该非常接近100毫秒。他们应该不同的唯一方法是实时和OS刻度计数器初始化之间的转换,是正确的吗?在Os ticks计数器初始化之后,间隔长度应该与“任何”精确时钟相同? – 2017-07-27 08:59:35

+1

@Mindaugas:系统时钟可能因时区变化,手动时间校正或自动校正等原因而发生变化。通过NTP。重点是如果你想测量经过的时间,你使用秒表,但*不会给你一个日期时间,因为它只测量经过的时间。 – 2017-07-27 11:14:02

+0

非常感谢!我在考虑缩短时间范围,但感谢给我更多的理解。 – 2017-07-27 11:31:29

0

请记住,如果你想跟踪经过的时间,你应该使用:

Stopwatch sw = Stopwatch.StartNew(); 
//do stuff 
sw.Elapsed; //or 
sw.ElapsedMilliseconds; 

这准确地转换蜱实时。将ticks转换为DateTime,然后比较DateTimes也可以,但上面更简单。

一些(包括我自己)都错误地使用这样的代码,并得到了它不好的时候:

startTime = Stopwatch.GetTimestamp(); 

totalTime = (Stopwatch.GetTimestamp() - startTime)/10000; 
//it was assumed 10,000 ticks was a millisecond, incorrectly 
+1

Stopwatch.Frequency,这是ticks的数量pr。秒,可以用来纠正你的最后一个例子:elapsedMs =(Stopwatch.GetTimestamp() - startTime)/(Stopwatch.Frequency/1000); – Jens 2016-11-11 10:19:59