【发布时间】:2017-02-07 09:07:06
【问题描述】:
我在 C 和 C++(没有 GC 的语言)方面有经验,但最近才经常使用 C#。我有一个问题,我想我已经得到了答案,但我希望有人确认我,或者纠正我(如果我错了)。
假设我有以下
int[,] g = new int[nx, ny];
很容易。这只是为 2D 整数数组分离内存。之后我可以使用它,只要我不超过 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 分离内存时,我都会留下永远无法到达的泄漏内存。显然我将不得不“删除”这个。 但是既然C#有垃圾回收,我可以不受惩罚地做上面的吗??
换句话说,我上面的代码足够安全吗?
有什么更好的建议吗?
【问题讨论】:
-
你做的很好。只需确保包含对该数组的引用(如果有)的任何非本地字段都设置为 null 或替换为对新数组的引用。如果你有一个引用数组的静态字段,显然内存将被保留,而该引用仍然可以访问。
-
简短回答:除非您正在处理非托管资源或分配非常大的对象,否则您通常不必担心 C# 中的内存泄漏。
标签: c# memory-leaks garbage-collection