Environment.TickCount与DateTime.Now

可以Environment.TickCount用来计算时间跨度吗?


int start = Environment.TickCount;

// Do stuff

int duration = Environment.TickCount - start;

Console.WriteLine("That took " + duration " ms");

因为它TickCount是有符号的,并且将在25天后翻转(要花费50天才能全部击中32位,但是如果您想对数学有任何了解,就必须报废有符号的位),这似乎太冒险了,无法使用。


我正在使用DateTime.Now。这是最好的方法吗?


DateTime start = DateTime.Now;

// Do stuff

TimeSpan duration = DateTime.Now - start;

Console.WriteLine("That took " + duration.TotalMilliseconds + " ms");


跃然一笑
浏览 1301回答 3
3回答

鸿蒙传说

您为什么担心结转?只要您测量的持续时间在24.9天以内,并且您可以计算相对持续时间,就可以了。只要您只关心自己那部分运行时间(而不是直接在起点和终点进行小于或大于比较),系统就可以运行多长时间了。即这个:&nbsp;int before_rollover = Int32.MaxValue - 5;&nbsp;int after_rollover = Int32.MinValue + 7;&nbsp;int duration = after_rollover - before_rollover;&nbsp;Console.WriteLine("before_rollover: " + before_rollover.ToString());&nbsp;Console.WriteLine("after_rollover: " + after_rollover.ToString());&nbsp;Console.WriteLine("duration: " + duration.ToString());正确打印:&nbsp;before_rollover: 2147483642&nbsp;after_rollover: -2147483641&nbsp;duration: 13您不必担心标志位。C#和C一样,可以让CPU处理。在嵌入式系统中,我经常遇到这种情况。例如,我永远不会直接比较beforerollover <afterrollover。我将始终执行减法来找到将过渡考虑在内的持续时间,然后根据该持续时间进行任何其他计算。
打开App,查看更多内容
随时随地看视频慕课网APP