2011-06-24 40 views
2

我在時間關鍵的一段代碼中使用了System.DateTime.Now.Ticks,我發現它是一個瓶頸。這幾乎肯定是由於實例化在幕後發生的DateTime類的開銷。.NET Micro Framework中的System.DateTime.Now.Ticks的替代方法?

有人告訴我可以從System.Environment.TickCount得到這些信息。但是,這是毫秒,這對我所需要的測量來說太粗糙了。雖然這大概是兩倍的速度。

有沒有一些方法來獲得System.DateTime.Now.Ticks的準確性,而沒有構建System.DateTime.Now的開銷?

+0

'DateTime'是一個* struct *,所以「實例化」不會發生。 –

+0

@Kirk:不,但年計算呢! – Eric

+0

我之前沒有使用它,所以我不知道它是否適合您的需求,但請查看[Utility.GetMachineTime](http://msdn.microsoft.com/zh-cn/library/microsoft。 spot.hardware.utility.getmachinetime.aspx)。我發現它在[此論壇帖子]上引用(http://forums.netduino.com/index.php?/topic/97-systemdiagnosticsstopwatch-class/)。 – cbley

回答

0

答案取決於你需要什麼時間。例如,如果您試圖比較來自應用程序的相同正在運行的實例的兩個時間實例,則可以嘗試使用DateTime.UtcNow,該位置未針對區域設置或DST進行調整。

如果您需要在特定時間觸發事件,請使用Timer(如果您關心粒度,可能使用System.Threading.Timer,儘管System.Timers.Timer更易於使用)。

如果您因爲某些其他原因需要它,請指定。

1

埃裏克,

只是讓你瞭解過,當你調用的DateTime的蜱財產,發生了什麼是.NET框架的日期和時間(毫秒)轉換爲刻度值。換句話說,您獲取的Tick值不是時間的度量,而是日期時間結構的轉換,其本身以毫秒爲單位進行度量。你可能會覺得你正在通過使用Ticks獲得一些高分辨率的時間,但實際上,毫秒就像你使用DateTime一樣好。刻度值除以類似於0x2500的毫秒數,這就是爲什麼你得到一個高精度的數字。但請記住,時間仍然以毫秒爲單位。

4

許多微控制器都有一個實時時鐘,它運行一個32768赫茲的晶振,爲晶體定時器或內置於硬件中的脈衝計數器供電。

例如,本文檔: http://www.ghielectronics.com/downloads/FEZ/Beginners%20guide%20to%20NETMF.pdf (第91頁)介紹了在USBIZI設備上使用脈衝計數器。

它也鏈接到這個文件 http://www.keil.com/dd/docs/datashts/philips/lpc23xx_um.pdf 哪些在p。 585描述了TickCounterRegister 6.2.2時鐘節拍計數器寄存器(CTCR - 0xE002 4004)

因此,您應該能夠讀取該寄存器以獲得65536個滴答的滾動計數。如果兩次讀取該寄存器所用的時間少於0.5秒,則有符號減法,如果小於0則加上65536會給你經過的時間。