在.NET之前的世界中,我总是假设int比字节快,因为这就是处理器的工作方式。
现在习惯使用int即使字节可以工作,例如当byte是存储在数据库中的时候
问题:.NET如何从性能/内存的角度来处理字节类型与int。
更新: 感谢您的投入。不幸的是,没有人真正回答这个问题.NET如何处理字节与int。
如果性能没有差异,那么我喜欢chills42的用法: 用于算术的int 二进制的字节数 我将继续这样做。
答案 0 :(得分:12)
你的pre -.NET假设是错误的 - 周围总是有很多计算机系统,虽然名义上是“字节可寻址的”,但是必须通过读取一个完整的单词来设置一个字节,将其屏蔽掉以改变它它的一个字节,全部写下来 - 比设置一个完整的单词慢。这取决于处理器和内存连接方式的内部,而不是程序员可见的架构。
无论是在.NET还是本机代码中,首先关注的是将数据用作应用程序的语义正确,而不是试图双重猜测计算机系统的架构师 - “过早优化是编程中所有恶意的根源”,引用Knuth引用Hoare。
答案 1 :(得分:7)
您是在谈论存储空间还是字节操作?如果是存储空间,是的,它占用的空间少于int(1个字节对4个字节)。
就一个字节的算术运算而言,我没有原始数字,实际上只有一个分析器可以给你。但是,您应该考虑在原始字节实例上不进行算术运算。相反,它们被提升为int,然后操作在int上完成。这就是为什么你必须显式地转换像下面的
这样的操作byte b1 = 4;
byte b2 = 6;
byte b3 = b1 + b2; // Does not compile because the type is int
因此,在一般情况下,我认为可以肯定地说int上的算术运算比一个字节的运算速度快。仅仅因为在字节情况下,您支付类型促销的(可能非常小的)成本。
答案 2 :(得分:2)
除非您完成设计并需要找到巧妙的优化方法,否则只需使用您需要的产品。
如果你需要一个计数器或正在进行基本的数学计算,那么它可能就是你想要的,如果你正在使用二进制数据,那就去一个字节。
最后,每种类型都应针对其预期用途进行优化,因此您最好将时间花在设计上而不是优化上。
答案 3 :(得分:2)
因此,.NET / CLR不会添加任何内容。并且所有算术运算都是针对int值完成的,因此字节和int之间没有区别。
答案 4 :(得分:0)
与任何其他平台相同。为什么.NET会改变这个?代码仍然必须在同一个CPU上运行,它具有与以往相同的性能特征。
这意味着您默认仍然使用int
。