我如何在.NET中释放内存?

时间:2010-12-02 06:11:34

标签: .net garbage-collection

如何在.NET中释放内存?这样做是否正确:

myArray = null;
GC.Collect();

myArray = Nothing
GC.Collect()

或者我应该总是等待操作系统准备就绪时发生垃圾收集吗?

感谢。

4 个答案:

答案 0 :(得分:4)

这些都不会做你想要的。 在托管运行时中,释放引用使用的内存是非确定性的,它仅取决于垃圾收集器何时运行以及使用哪种策略。 因此,对于常规类型不做任何事情,只需放松并编写业务代码。

答案 1 :(得分:0)

作为最佳做法,只需等待GC收集未使用的资源即可。 GC足够智能,可以知道何时应该进行收集。迫使GC运行成本很高。

答案 2 :(得分:0)

根据MSDN的GC.Collect()页面:

  

所有物品,无论它们在记忆中存在多长时间,都被考虑收集;但是,不会收集托管代码中引用的对象。使用此方法强制系统尝试回收最大可用内存量。

这表明如果没有其他引用,则可以释放从删除引用的内存。不过,你应该知道这个函数可能需要很长时间(从程序的角度来看)才能运行,所以你可能不想自己调用它:如果你最终试图经常这样做,它可能会做不必要的冗余工作并大大减慢你的应用程序。如果它是有益的,它应该很快就会发生。如果你真的想要确定性破坏,可以考虑使用一些C ++并使用“真正的”堆而不是GC-ed堆。

答案 3 :(得分:0)

为什么你不应该关心,而是放松并继续编写代码,因为它已经由this

处理了