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