我有C和C ++(没有GC的语言)的经验,但最近才使用C#。我有一个问题,我认为我得到了答案,但我希望有人确认我,或纠正我(如果我错了)。
说我有以下
int[,] g = new 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,我可以不受惩罚吗?
换句话说,我的代码是否足够安全?
有任何更好的建议吗?
答案 0 :(得分:3)
您的代码足够安全。
GC仅收集堆上没有引用的对象,指向它们的堆栈。在您的场景中,for循环范围中的变量获得另一个引用,前一个数组将丢失对它的所有可用引用,从而在一段时间内收集。
此外,不需要在外部作用域中声明该变量,因为它在编译期间稍后进行优化。更多相关信息:here