在C#中管理数组(内存管理)

时间:2017-02-07 09:07:06

标签: c# memory-leaks garbage-collection

我有C和C ++(没有GC的语言)的经验,但最近才使用C#。我有一个问题,我认为我得到了答案,但我希望有人确认我,或纠正我(如果我错了)。

说我有以下

int[,] g = new int[nx, ny];

很容易。这只是将内存分成两维的int数组。之后我可以使用它,只要我不超过nx或ny作为数组的限制。

现在,假设我想多次执行 但每次都使用不同的nx和ny(这些新值的计算方式并不重要)

所以我会这样做

int[,] g;

for(k=0;k<numberOfTimes;k++)
{
 //re-calculate nx and ny


 g = new int[nx, ny];

 //work with g


}

通常我会认为,每当我为g分离记忆时,我就会留下永远无法触及的泄露记忆。显然我必须&#34;删除&#34;这个。 但是由于C#有Garbage Collection,我可以不受惩罚吗?

换句话说,我的代码是否足够安全?

有任何更好的建议吗?

1 个答案:

答案 0 :(得分:3)

您的代码足够安全。

GC仅收集堆上没有引用的对象,指向它们的堆栈。在您的场景中,for循环范围中的变量获得另一个引用,前一个数组将丢失对它的所有可用引用,从而在一段时间内收集。

此外,不需要在外部作用域中声明该变量,因为它在编译期间稍后进行优化。更多相关信息:here