2012-06-21 64 views
7

在.Net框架的DateTime結構中,Year被定義爲int(實際上是一個System.Int32)。但是,MSDN文檔說該值始終爲between 1 and 9999。因此,一個ushort(System.UInt16)綽綽有餘存儲的價值和佔用一半的空間。那麼爲什麼它是一個整數,而不是一個ushort?爲什麼DateTime.Now.Year是int而不是ushort

有一個從ushort到int的隱式轉換,因此沒有需要做的轉換來完成年度的整數運算。

我意識到這是一個微型優化問題,因此不是很重要。我只是好奇。

+2

這是*不*優化。底部http://stackoverflow.com/questions/10065287/why-is-ushort-system-uint16-ushort-equal-to-int-system-int32/10157517#10157517 –

+0

即使有'ushort',我們會浪費前兩位...... – AakashM

回答

4

因此,ushort(System.UInt16)已經足夠存儲該值並佔用了一半的空間。

你認爲「空間」在哪裏被浪費? DateTime不會將每個組件都存儲在單獨的字段中。如果存儲一年的地方,隨時將它轉換爲ushort - 投下Monthbyte

注意ushort是不符合CLS,這可能是其原因。有一個很多的屬性,這將是有意義的無符號,如string.Length等......但框架試圖在符合CLS的地方,它可以。

0
  • 單元返回一個無符號的16位整數
  • int返回一個32位的整數。

我假設JIT Compiler利用了CPU架構,因此在32位處理將比16位處理效率更高。我相信在使用整數與長整數(字節分配與體系結構速度)時,與VB6有類似的爭論。

http://blogs.msdn.com/b/davidnotario/archive/2005/08/15/451845.aspx

相關問題