-3

我想知道我的程序速度。当我使用类似Array.GetLength(1)或这样的方法时,它总是返回int变量。或者当我插入一个数字时,编译器会int再次声明它。我是否需要将它们转换为byte变量以降低内存使用量,否则会影响我的程序速度?

4

2 回答 2

4

就计算机对它们执行的算术运算而言,两者都同样快。

但是,如果您有大量数据,则byte可以明显更快,这纯粹是因为较小的大小:

  1. 您的 CPU 缓存包含的byte对象多于int对象。
  2. 使用对象数组的每个元素byte比对象需要更少的内存带宽int。如果您必须使用数据库或通过网络发送数据,那么带宽的使用将变得非常重要。
  3. 您的计算机 RAMbyte在开始必须将硬盘用作虚拟内存之前可以保存更多值。如果您的数据集的大小int需要虚拟内存byte而不需要,那么byte速度会快得多。

字节唯一真正的缺点是您最终会编写代码来int经常转换,即使这种转换最终是在 CPU 上免费完成的(使用字节传输来寄存器而不是字传输)

于 2013-05-12T21:35:18.047 回答
4

方法变量在堆栈上(警告:迭代器块、捕获的变量等 - 但不要担心这些)。无论您做什么,堆栈的大小都将相同。如果您在谈论严重超大的值类型,那么明显的问题是堆栈耗尽(这可能可以通过 来缓解ref,但这与这个问题无关) - 但是将本地方法变量inttobyte更改不会改变任何东西. 实际上,IIRC IL 堆栈操作根据 4 或 8 字节值定义。

基本上:这根本没有帮助,所以不用担心。但它甚至不会远程影响应用程序的性能或内存使用。如果你想知道什么,那么 profile。

于 2013-05-12T21:36:08.627 回答