如何在.NET中释放内存?这样做是否正确:
myArray = null;
GC.Collect();
或
myArray = Nothing
GC.Collect()
或者我应该总是等待操作系统准备就绪时发生垃圾收集吗?
感谢。
答案 0 :(得分:4)
这些都不会做你想要的。 在托管运行时中,释放引用使用的内存是非确定性的,它仅取决于垃圾收集器何时运行以及使用哪种策略。 因此,对于常规类型不做任何事情,只需放松并编写业务代码。
答案 1 :(得分:0)
作为最佳做法,只需等待GC收集未使用的资源即可。 GC足够智能,可以知道何时应该进行收集。迫使GC运行成本很高。
答案 2 :(得分:0)
根据MSDN的GC.Collect()页面:
所有物品,无论它们在记忆中存在多长时间,都被考虑收集;但是,不会收集托管代码中引用的对象。使用此方法强制系统尝试回收最大可用内存量。
这表明如果没有其他引用,则可以释放从删除引用的内存。不过,你应该知道这个函数可能需要很长时间(从程序的角度来看)才能运行,所以你可能不想自己调用它:如果你最终试图经常这样做,它可能会做不必要的冗余工作并大大减慢你的应用程序。如果它是有益的,它应该很快就会发生。如果你真的想要确定性破坏,可以考虑使用一些C ++并使用“真正的”堆而不是GC-ed堆。
答案 3 :(得分:0)
为什么你不应该关心,而是放松并继续编写代码,因为它已经由this
处理了