我记得曾经在某处阅读过使用Int32比Byte更好(在性能方面),即使你只需要Byte。这仅适用于您不关心存储的情况。这个观点是否正确?
例如,我需要一个变量来保存一周的某一天。我应该使用哪种类型?
int dayOfWeek;
或者byte dayOfWeek;
编辑: 各位,我知道 DayOfWeek 枚举。这个问题是关于其他事情的。
我记得曾经在某处阅读过使用Int32比Byte更好(在性能方面),即使你只需要Byte。这仅适用于您不关心存储的情况。这个观点是否正确?
例如,我需要一个变量来保存一周的某一天。我应该使用哪种类型?
int dayOfWeek;
或者byte dayOfWeek;
编辑: 各位,我知道 DayOfWeek 枚举。这个问题是关于其他事情的。
通常情况下,是的,32位整数性能稍微好一些,因为它已经适当地对齐了本地CPU指令。只有在你实际需要存储该大小的内容时,才应该使用更小的数字类型。
byte[]
(八位字节数组)而非int[]
或uint[]
的形式给出,因此在这种情况下byte
似乎更受青睐。当然,如果使用int[]
,则限制了数据长度为32位的整数倍数的情况(而不是8位),这可能会根据上下文成为问题或优势。 - Jeppe Stig Nielsen除非有强烈的理由不这样做,否则应该使用DayOfWeek枚举。
DayOfWeek day = DayOfWeek.Friday;
为了解释一下我被踩的原因:
你的代码正确性几乎总是比性能更重要,特别是在我们谈论这么小的差异时。如果使用枚举或类来表示数据的语义(无论是DayOfWeek枚举还是其他枚举,或者Gallons或Feet类),可以使你的代码更清晰、更易于维护,这将帮助你安全地进行优化。
int z;
int x = 3;
int y = 4;
z = x + y;
这可能会编译通过。但是无法确定它是否有意义。
Gallons z;
Gallons x = new Gallons(3);
Feet y = new Feet(4);
z = x + y;
这段代码无法通过编译,甚至看起来很明显为什么会出错——把加仑和英尺加在一起没有任何意义。
byte dayOfWeek
可能更可取,因为它更接近您期望的值范围。short
覆盖了我的可能值,如果我尝试传递任何较大的值,编译器将在代码编译之前警告我。不幸的是,在这个特定的例子中,C# DateTime.Year属性将返回一个int - 因此,如果我需要将例如DateTime.Now.Year
传递给我的函数,那么我必须转换结果。在存储量方面,使用byte
,在CPU性能方面,使用int
。
byte
就像其他整数一样工作?基本上是这样的。https://en.wikipedia.org/wiki/Integer_(computer_science)#Common_integral_data_types - carloswm85