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