.NET中byte与int的性能

Max*_*yev 10 .net c#

在.NET之前的世界中,我总是假设int比字节快,因为这就是处理器的工作方式.

现在,即使字节可以工作,也可以使用int,例如当byte是存储在数据库中的时候

问题:.NET如何从性能/内存的点视图处理字节类型与int.

更新:感谢您的输入.不幸的是,没有人真正回答这个问题 .NET如何处理byte与int.

如果性能没有差异,那么我喜欢chills42如何把它:int for arithmetics bytes for binary我将继续这样做.

Ale*_*lli 12

你的pre -.NET假设是错误的 - 周围总是有很多计算机系统,虽然名义上是"字节可寻址的",但是必须通过读取一个完整的字来设置一个字节,将其屏蔽掉以改变一个字节把它写下来 - 比设置一个完整的单词慢.它取决于处理器和内存连接方式的内部结构,而不是程序员可见的体系结构.

无论是在.NET还是本机代码中,首先关注的是使用数据作为应用程序的语义正确,而不是试图双重猜测计算机系统的架构师 - "过早优化是编程中所有邪恶的根源",引用Knuth引用霍尔.

  • @Maxim,当然它"需要付出代价" - 自从IBM引入架构概念(机器语言程序员看到的)与实际硬件完全不同时,你就不知道自己是否付钱了,大约50年前的IBM 360系列.如果你正在编写任何中途流行的架构(x86是最糟糕的,因为它迄今为止最多,最不同的实现),你只能知道读取1字节对1全字是多么昂贵.所以,不要担心它,而是使用简单明了的代码. (2认同)

Jar*_*Par 7

你在谈论一个字节的存储空间或操作吗?如果是存储空间,是的,它占用的空间少于int(1个字节对4个字节).

就字节的算术运算而言,我没有原始数字,实际上只有一个分析器可以给你.但是,您应该考虑在原始字节实例上不进行算术运算.相反,它们被提升为int,然后操作在int上完成.这就是你必须显式地转换如下操作的原因

byte b1 = 4;
byte b2 = 6;
byte b3 = b1 + b2;  // Does not compile because the type is int
Run Code Online (Sandbox Code Playgroud)

所以在一般情况下我认为可以肯定地说int上的算术运算比一个字节的运算速度快.仅仅因为在字节情况下,您支付类型促销的(可能非常小的)成本.


Max*_*yev 3

好的,我刚刚打开了反汇编窗口。除了常规的“mov byte”之外什么都没有

因此,.NET/CLR 不会对此添加任何内容。所有算术运算都是针对 int 值进行的,因此 bytes 和 int 之间没有区别。