我正在编写一个使用多个字节数组的函数。但是,我只需要在任何给定时间保留最新的。在我的函数开头(在主循环之前)声明一个 byte[] 有什么问题,然后继续为其分配最新的值吗?相反,在我的函数的每个阶段制作一个字节数组实例和变量是一种更好的做法吗?这种重复分配会导致性能损失吗?
问问题
1443 次
2 回答
3
当你声明一个数组时,与 C/C++ 不同,数组是在堆上分配的,而你的变量实际上是对数组的引用。因此重用相同的变量不会使您免于重新分配内存。如果数组的大小完全相同,那么您可以分配一次并重用相同的对象,这将显着提高性能。重用同一个引用的唯一好处是,一旦将它指向一个新数组,旧数组就可以自由地被垃圾收集,尽管还有其他方法可以实现这一点,比如将其设置为 null。
于 2012-07-31T02:17:52.633 回答
2
完成其中任何一项所需的工作量没有区别。编译器会将它们转换为相同的实现。
需要注意的最重要的事情是,在 C# 中,除非您说“new”,否则变量声明实际上不会提交任何资源。如果您精通 C++,您应该想象所有C# 变量声明都有一个隐含的 * 与之关联。例如在您的情况下:byte[] *onePageOfBytes
. 您要求为您提供字节数组的函数将执行实际分配,除非它知道如何回收以前的数组,否则您不会通过尝试避免变量定义来获得任何收益。
于 2012-07-31T02:21:33.730 回答