在.Net框架DateTime结构中,Year被定义为int(实际上是System.Int32)。但是,MSDN文档说该值始终为between 1 and 9999。因此,ushort(System.UInt16)足以存储该值并占用一半的空间。那么为什么它是一个int而不是一个ushort?
存在从ushort到int的隐式转换,因此在年份上不需要进行转换来进行整数运算。
我意识到这是一个微优化问题,因此不是很重要。我很好奇。
答案 0 :(得分:4)
因此,ushort(System.UInt16)足以存储该值并占用一半的空间。
你认为“空间”被浪费在哪里? DateTime
无论如何都不会将每个组件存储在单独的字段中。如果您将某年存储在某处,请随意将其投放到ushort
- 并将Month
投放到byte
等等。
请注意,ushort
不符合CLS,这可能就是它的原因。有一个很多的属性是有意义的无条件的,例如string.Length
等......但框架试图在可能的地方符合CLS。
答案 1 :(得分:0)
我假设JIT编译器利用CPU架构,因此32位处理比16位更有效。我相信在使用Integers vs Longs(Bytes allocation vs Architecture Speed)时,VB6也存在类似的争论。
http://blogs.msdn.com/b/davidnotario/archive/2005/08/15/451845.aspx