.NET Micro Framework中System.DateTime.Now.Ticks的替代项
本文关键字:Ticks Now DateTime Micro Framework System NET | 更新日期: 2023-09-27 18:00:33
我在一段时间关键的代码中使用System.DateTime.Now.Ticks
,发现它是一个瓶颈。这几乎可以肯定是由于在后台实例化DateTime
类的开销。
有人告诉我,我可以从System.Environment.TickCount
获得这些信息。然而,这是以毫秒为单位的,这对于我所需要的来说太粗略了。尽管这大约是速度的两倍。
有没有办法在不需要构造System.DateTime.Now
的开销的情况下获得System.DateTime.Now.Ticks
的精度?
许多微控制器都有一个实时时钟,它由32768 Hz的晶体运行,为硬件中内置的纹波计时器或脉冲计数器供电。
例如,本文档:http://www.ghielectronics.com/downloads/FEZ/Beginners%20guide%20to%20NETMF.pdf第91页描述了在USBIZI设备上使用脉冲计数器。
它还链接到此文档http://www.keil.com/dd/docs/datashts/philips/lpc23xx_um.pdf第585页描述了TickCounterRegister6.2.2时钟刻度计数器寄存器(CTCR-0xE002 4004)
因此,您应该能够读取该寄存器以获得65536个刻度的滚动计数。如果两次读取该寄存器之间的运行时间小于0.5秒,则进行带符号的减法运算,如果小于0,则加65536将得到运行时间。
Eric,
您也可以理解,当您调用DateTime的Ticks属性时,.NET框架正在将日期和时间(以毫秒为单位)转换为Tick值。换句话说,您返回的Tick值不是对所用时间的测量,而是对日期-时间结构的转换,其本身以毫秒为单位进行测量。你可能会觉得使用Ticks可以获得一些高分辨率的计时,但实际上,毫秒和使用DateTime一样好。刻度值将经过的毫秒数除以0x2500,这就是获得高精度数字的原因。但请记住,时间仍在以毫秒为单位流逝。
答案取决于你需要什么时间。例如,如果您试图比较应用程序的同一运行实例中的两个时间实例,则可以尝试使用DateTime.UtcNow,它不会根据区域设置或DST进行调整。
如果您需要在特定时间触发事件,请使用Timer(如果您非常关心粒度,则可能是System.Threading.Timer,尽管System.Timers.Timer更易于使用)。
如果您因其他原因需要,请具体说明。