c# - DateTime 的默认时间精度是多少?

标签 c# datetime precision

我在 Visual Studio 中做了一个用于数据传输的小 winform 程序,我使用了一种方法来提供传输持续时间。传输完成后,程序将返回一个对话窗口以显示时间。

但是这里我不知道什么是时间精度,也不知道定时器的分辨率,怎么会这么精确,甚至微秒?

var startTime = DateTime.Now;
this.transferdata();
var endTime = DateTime.Now;
var timeElapsed = endTime.Subtract(startTime);

enter image description here

看到类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/

相关文章:

c# - 由于未初始化的静态属性,单元测试失败

javascript - Dygraphs:适用于 axisLabelFormatter 但不适用于 valueFormatter 的 JS 函数

MySQL 将 DATE 字符串与 DATETIME 字段中的字符串进行比较

时间:2019-03-08 标签:c#windowsformscapitalletters

c# - Linq 结果内的嵌套连接数据

c# - 同步调用异步嵌套方法 - 异步会在路径上起作用吗?

json - 使用 JSON/HTTP/REST 接口(interface)查询 MongoDB

machine-learning - 准确度作为精确度和召回率的函数

testing - 什么是好的经验法则浮点比较方法选择器?

python - 从 float32 转换为 float 时如何保持精度?