加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 02:02:56 所属栏目:百科 来源:网络整理
导读:我在Visual Studio中为数据传输做了一个小的winform程序,我使用了一种方法来提供传输持续时间.传输完成后,程序将返回一个对话窗口以显示时间. 但是在这里我不知道时间精度或定时器的分辨率是多少,它怎么能是如此精确,甚至是微秒? var startTime = DateTime.
我在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.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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读