C# 是否可以替代.NET Micro Framework中的System.DateTime.Now.Ticks?

C# 是否可以替代.NET Micro Framework中的System.DateTime.Now.Ticks?,c#,micro-optimization,.net-micro-framework,C#,Micro Optimization,.net Micro Framework,我在一段时间关键的代码中使用了System.DateTime.Now.Ticks,我发现这是一个瓶颈。这几乎可以肯定是由于在幕后实例化DateTime类的开销造成的 我被告知我可以从System.Environment.TickCount获取此信息。然而,这是以毫秒为单位的,这对于我所需要的度量来说太粗糙了。虽然这大约是两倍的速度 是否有某种方法可以获得System.DateTime.Now.Ticks的准确性,而无需构建System.DateTime.Now?答案取决于您需要多少时间。例如,如

我在一段时间关键的代码中使用了
System.DateTime.Now.Ticks
,我发现这是一个瓶颈。这几乎可以肯定是由于在幕后实例化
DateTime
类的开销造成的

我被告知我可以从
System.Environment.TickCount
获取此信息。然而,这是以毫秒为单位的,这对于我所需要的度量来说太粗糙了。虽然这大约是两倍的速度


是否有某种方法可以获得
System.DateTime.Now.Ticks
的准确性,而无需构建
System.DateTime.Now

答案取决于您需要多少时间。例如,如果您试图比较应用程序同一运行实例中的两个时间实例,则可以尝试使用DateTime.UtcNow,它不会根据区域设置或DST进行调整

如果需要在特定时间触发事件,请使用计时器(如果您非常关心粒度,可能是System.Threading.Timer,尽管System.Timers.Timer更易于使用)

如果您出于其他原因需要它,请指定。

Eric


您也可以理解,当您调用DateTime的Ticks属性时,.NET framework正在将日期和时间(以毫秒为单位)转换为Tick值。换句话说,您返回的刻度值不是对经过时间的度量,而是对日期-时间结构的转换,它本身是以毫秒为单位度量的。您可能觉得通过使用滴答声可以获得一些高分辨率的计时,但实际上,毫秒与使用DateTime一样好。tick值将经过的毫秒数除以0x2500,这就是获得高精度数字的原因。但请记住,时间仍在以毫秒为单位流逝。

许多微控制器都有一个实时时钟,由32768 Hz的晶体运行,该晶体为硬件内置的纹波定时器或脉冲计数器供电

例如,本文件: 第91页介绍了在USBIZI设备上使用脉冲计数器

它还链接到此文档 在p。585描述了计数器寄存器 6.2.2时钟滴答计数器寄存器(CTCR-0xE002 4004)


因此,您应该能够读取该寄存器以获得65536个刻度的滚动计数。如果两次读取该寄存器的时间间隔小于0.5秒,则进行有符号减法运算,如果小于0,则加65536将得到经过的时间。

DateTime
是一个结构,因此不会发生“实例化”。@Kirk:不会,但年份计算会!我以前没用过,所以我不知道它是否适合你的需要,但是请检查一下。我在上找到了它。@cbley:试过了。我得到的时间和以前几乎一样。(当我在一个答案中发布上述内容时的回应现在被删除了)20毫秒是我想要的——埃里克2分钟前