繁体   English   中英

.NET中byte与int的性能

[英]performance of byte vs. int in .NET

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

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

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

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

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

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

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

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

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

byte b1 = 4;
byte b2 = 6;
byte b3 = b1 + b2;  // Does not compile because the type is int

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

除非您完成了设计并需要找到巧妙的优化方法,否则只需使用您需要的东西。

如果您需要一个计数器或正在进行基本数学运算,那么它可能就是您想要的,如果您正在处理二进制数据,请使用一个字节。

最后,每种类型都应针对其预期目的进行优化,因此您最好将时间花在设计上而不是优化上。

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

因此,.NET / CLR不会添加任何内容。 并且所有算术运算都是针对int值完成的,因此字节和int之间没有区别。

与任何其他平台相同。 为什么.NET会改变这个? 代码仍然必须在同一个CPU上运行,它具有与以往相同的性能特征。

这意味着你应该仍然默认使用int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM