在方法中返回数组会产生垃圾吗?

时间:2015-10-27 16:03:15

标签: c# arrays garbage-collection

我记得在某个地方读过,在方法中返回数组会产生不必要的垃圾,而将数组作为引用传递却不会。

//    Bad example. Generates garbage.
public int[] GetIntArray()
{
    int[] intArray = new int[capacity]
    //    Fill the array with something.
    return intArray;
}

//    Good example. No garbage.
public void GetIntArray(int[] intArray)
{
    //    Fill the array with something.
    return;
}

这是真的吗?我应该担心它并且真的避免第一种情况吗?

2 个答案:

答案 0 :(得分:2)

  

这是真的吗?

不在这个特定的例子中。如果您已经传入一个数组,并根据它创建了一个 new 数组,那么是的,你会使用更多的内存,但在这种情况下会出现这样的情况。只有一个数组 - 要么在方法内部创建,要么在其外部创建。

  

我应该担心它并且真的避免第一种情况吗?

通常对于何时创建新集合以及何时修改现有集合没有严格的规则。两者都有有效的用例,因此取决于哪种方法的情况更好"。

答案 1 :(得分:0)

是。它会阻止该方法重新使用相同的数组。通常,让调用者执行内存分配更有效。但是,这是否值得麻烦显然是一种权衡。