我在 Visual Studio 中做了一个用于数据传输的小 winform 程序,我使用了一种方法来提供传输持续时间。传输完成后,程序将返回一个对话窗口以显示时间。
但是这里我不知道什么是时间精度,也不知道定时器的分辨率,怎么会这么精确,甚至微秒?
var startTime = DateTime.Now;
this.transferdata();
var endTime = DateTime.Now;
var timeElapsed = endTime.Subtract(startTime);
看到类DateTime的定义时,只有毫秒级的精度。谁能告诉我为什么 visual studio 2012 中有这么高分辨率的计时器?还是跟操作系统有关系?
最佳答案
时钟的精度取决于操作系统。系统时钟每秒滴答一定次数,您只能测量整个滴答。
您可以使用如下代码测试特定计算机的分辨率:
DateTime t1 = DateTime.Now;
DateTime t2;
while ((t2 = DateTime.Now) == t1) ;
Console.WriteLine(t2 - t1);
在我的计算机上,结果是 00:00:00.0156253
,这意味着系统时钟每秒滴答 64 次。
(注意:DateTime
类型也有节拍,但这与系统时钟节拍不同。DateTime
节拍是 1/10000000 秒。)
要更精确地测量时间,您应该使用 Stopwatch
类。它的分辨率也取决于系统,但比系统时钟高得多。您可以从 Stopwatch.Frequency
属性获取分辨率,在我的计算机上它返回 2143566
,它比 64 多一点...
工作前启动秒表,工作后停止,然后获取耗时:
Stopwatch time = Stopwatch.StartNew();
this.transferdata();
time.Stop();
TimeSpan timeElapsed = time.Elapsed;
这将以 TimeSpan
类型可以处理的分辨率返回时间,例如1/10000000 秒。您还可以根据滴答数计算时间:
double timeElapsed = (double)s.ElapsedTicks / (double)Stopwatch.Frequency;
关于c# - DateTime 的默认时间精度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343998/