为了账号安全,请及时绑定邮箱和手机立即绑定

Environment.TickCount与DateTime.Now

Environment.TickCount与DateTime.Now

跃然一笑 2019-11-12 13:05:13
可以Environment.TickCount用来计算时间跨度吗?int start = Environment.TickCount;// Do stuffint duration = Environment.TickCount - start;Console.WriteLine("That took " + duration " ms");因为它TickCount是有符号的,并且将在25天后翻转(要花费50天才能全部击中32位,但是如果您想对数学有任何了解,就必须报废有符号的位),这似乎太冒险了,无法使用。我正在使用DateTime.Now。这是最好的方法吗?DateTime start = DateTime.Now;// Do stuffTimeSpan duration = DateTime.Now - start;Console.WriteLine("That took " + duration.TotalMilliseconds + " ms");
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您为什么担心结转?只要您测量的持续时间在24.9天以内,并且您可以计算相对持续时间,就可以了。只要您只关心自己那部分运行时间(而不是直接在起点和终点进行小于或大于比较),系统就可以运行多长时间了。即这个:


 int before_rollover = Int32.MaxValue - 5;

 int after_rollover = Int32.MinValue + 7;

 int duration = after_rollover - before_rollover;

 Console.WriteLine("before_rollover: " + before_rollover.ToString());

 Console.WriteLine("after_rollover: " + after_rollover.ToString());

 Console.WriteLine("duration: " + duration.ToString());

正确打印:


 before_rollover: 2147483642

 after_rollover: -2147483641

 duration: 13

您不必担心标志位。C#和C一样,可以让CPU处理。


在嵌入式系统中,我经常遇到这种情况。例如,我永远不会直接比较beforerollover <afterrollover。我将始终执行减法来找到将过渡考虑在内的持续时间,然后根据该持续时间进行任何其他计算。


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 1297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信