C# 25天后(或48-49天)Environment.TickCount溢出的方式

C# 25天后(或48-49天)Environment.TickCount溢出的方式,c#,.net,environment-variables,32bit-64bit,gettickcount,C#,.net,Environment Variables,32bit 64bit,Gettickcount,在阅读此问题及其答复时 我弄糊涂了 他们说,Environment.TickCount的有效期为48-49天(OP)(而@Cody Gray表示为25天),但它是一个int值,因此最多可以存储2147483647 现在,1毫秒包含10000个滴答声,这意味着它最多可以容纳214748.3+毫秒,也就是214+秒,也就是不到4分钟 我错过什么了吗 顺便说一句,现在有了提供64位值的Environment.TickCount64。对于初学者来说,TickCount返回毫秒,而不是DateTime.t

在阅读此问题及其答复时 我弄糊涂了

他们说,
Environment.TickCount
的有效期为48-49天(OP)(而@Cody Gray表示为25天),但它是一个
int
值,因此最多可以存储2147483647

现在,1毫秒包含10000个滴答声,这意味着它最多可以容纳214748.3+毫秒,也就是214+秒,也就是不到4分钟

我错过什么了吗


顺便说一句,现在有了提供64位值的
Environment.TickCount64

对于初学者来说,
TickCount
返回毫秒,而不是
DateTime.ticks意义上的ticks。这样做的精度与系统计时器相同,约为10-16毫秒

本文档解释了价值如何循环:

因为TickCount属性值的值是32位有符号整数,如果系统连续运行,TickCount将从零增加到Int32.MaxValue大约24.9天,然后跳到Int32.MinValue,这是一个负数,然后在接下来的24.9天内递增回零。您可以通过调用Windows GetTickCount函数(大约49.7天后重置为零)或调用GetTickCount64函数来解决此问题

通过计算,我们发现24.9天是21513600天(相比之下,
Int.MaxValue
为2147483647天)<代码>最大值+|最小值|
产生
4294967295
,如文档所示,如果除以86400000毫秒(1天),产生约49.7天


对于初学者,
滴答声计数
返回毫秒,而不是
日期时间.滴答声意义上的滴答声
。这样做的精度与系统计时器相同,约为10-16毫秒

本文档解释了价值如何循环:

因为TickCount属性值的值是32位有符号整数,如果系统连续运行,TickCount将从零增加到Int32.MaxValue大约24.9天,然后跳到Int32.MinValue,这是一个负数,然后在接下来的24.9天内递增回零。您可以通过调用Windows GetTickCount函数(大约49.7天后重置为零)或调用GetTickCount64函数来解决此问题

通过计算,我们发现24.9天是21513600天(相比之下,
Int.MaxValue
为2147483647天)<代码>最大值+|最小值|产生
4294967295
,如文档所示,如果除以86400000毫秒(1天),产生约49.7天


“1毫秒包含10000个滴答声”——不,1毫秒正好是1个滴答声。你的问题基于一个错误的前提,因此是完全无效的(而且没有用处)。@Peter Duniho:
环境。滴答声计数
有1滴答声/毫秒,但
日期时间。现在。滴答声
有10000滴答声/毫秒,我没有意识到这一点,因此感到困惑。此外,John共享的“源”链接明确提到了差异
TickCount
不同于
DateTime.Ticks
属性,后者是自1/1/0001,12:00am以来经过的100纳秒间隔数。“Environment.TickCount有1个tick/ms,但DateTime.Now.Ticks有10000个tick/毫秒,我没有意识到”——换句话说,您只是没有仔细阅读文档。“1毫秒包含10000个刻度”——不,1毫秒正好是1个刻度。你的问题基于一个错误的前提,因此是完全无效的(而且没有用处)。@Peter Duniho:
环境。滴答声计数
有1滴答声/毫秒,但
日期时间。现在。滴答声
有10000滴答声/毫秒,我没有意识到这一点,因此感到困惑。此外,John共享的“源”链接明确提到了差异
TickCount
不同于
DateTime.Ticks
属性,后者是自1/1/0001,12:00am以来经过的100纳秒间隔数。“Environment.TickCount有1个tick/ms,但DateTime.Now.Ticks有10000个tick/毫秒,我没有意识到”——换句话说,您只是没有足够仔细地阅读文档。