我听说即使你已经完成它,C#也不会马上释放内存。我可以强制C#释放内存吗?
我正在使用Visual Studio 2008 Express。那有关系吗?
P.S。我没有遇到C#的问题以及它如何管理内存。我只是好奇。
答案 0 :(得分:19)
吉姆,
你听错了。它通过一种称为垃圾收集器的机制定期清理内存。您可以通过类似下面的调用“强制”垃圾收集。
GC.Collect();
我强烈建议您阅读this MSDN article on garbage collection。
编辑1:“强制”在引号中。更明确的另一张海报是,这真的只是暗示它。你无法在特定的时间点实现它。因此,链接到.Net
中关于垃圾收集的文章编辑2:我意识到这里的每个人都只是直接回答了你的主要问题。至于你的第二个问题。使用Visual Studio 2008 Express仍将使用.net框架,它执行垃圾收集。因此,如果您升级到专业版,您仍将拥有相同的内存管理功能/限制。
编辑3:This wikipedia aritcles on finalizers提供了一些关于在终结器中适当做什么的好指示。基本上,如果您正在创建可以访问关键资源的对象,或者您正在使用此类对象,请实现IDispose和/或利用 using 语句。即使抛出异常,Using也会自动调用Dispose方法。这并不意味着你不需要给运行终结器提示......
答案 1 :(得分:9)
您不能强制 C#释放内存,但您可以请求 CLR通过调用
取消分配未引用的对象System.GC.Collect();
有一个方法WaitForPendingFinalizers
将“暂停当前线程,直到处理终结器队列的线程清空该队列”。虽然你不需要打电话。
正如其他人建议前往MSDN获取更多信息。
答案 2 :(得分:3)
您可能需要查看InfoQ.com上的 screencast^ 。它展示了.NET Garbage Collector
。
答案 3 :(得分:2)
答案 4 :(得分:0)
您可以通过以下两种方法清理记忆:
GC.Collect();
GC.WaitForPendingFinalizers();