2012-06-21 86 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

相关问题