在c#中重用字节数组的优缺点是什么?

时间:2012-07-31 02:00:26

标签: c# variables memory-management bytearray

我正在编写一个使用多个字节数组的函数。但是,我只需要在任何给定时间保留最新的一个。在我的函数开始时(在主循环之前)声明单个字节[]然后只是为它分配最新的值是否有什么问题?相反,在我的函数的每个阶段制作一个字节数组实例和变量是一种更好的做法吗?这种重复分配会导致性能下降吗?

2 个答案:

答案 0 :(得分:3)

当你声明一个数组时,与C / C ++不同,数组是在堆上分配的,而你变量实际上是对数组的引用。因此,重用相同的变量不会使您无法重新分配内存。如果数组的大小完全相同,那么您可以分配一次并重用相同的对象,这将有显着的性能提升。重新使用相同引用可能获得的唯一好处是,一旦将其指向新数组,旧数组就可以自由地进行垃圾回收,尽管还有其他方法可以实现此目的,例如将其设置为null。

答案 1 :(得分:2)

完成其中任何一项所需的工作量没有差别。编译器会将它们转换为相同的实现。

最值得注意的是,在C#中,除非你说“new”,否则变量声明实际上不会提交任何资源。如果你能熟练使用C ++,你应该想象所有 C#变量声明都有一个与它们相关的隐式*。例如,在您的情况下:byte[] *onePageOfBytes。您要求为字节数组提供的函数将执行实际分配,除非它知道如何回收以前的数组,否则通过尝试避免变量定义没有任何好处。