我可以在C#中强制清理内存吗?

jim*_*im 6 .net c# memory-management

我听说即使你已经完成它,C#也不会马上释放内存.我可以强制C#释放内存吗?

我正在使用Visual Studio 2008 Express.那有关系吗?

PS我没有遇到C#的问题以及它如何管理内存.我只是好奇.

Jas*_*n D 19

吉姆

你没听错.它通过一种称为垃圾收集器的机制定期清理内存.您可以通过下面的调用"强制"垃圾收集.

GC.Collect();
Run Code Online (Sandbox Code Playgroud)

我强烈建议你阅读关于垃圾收集的这篇MSDN文章.

编辑1:"强制"在引号中.更明确的另一张海报是,这真的只是暗示它.你无法在特定的时间点实现它.因此,链接到.Net中关于垃圾收集的文章

编辑2:我意识到这里的每个人只能直接回答你的主要问题.至于你的第二个问题.使用Visual Studio 2008 Express仍将使用.net框架,它执行垃圾收集.因此,如果您升级到专业版,您仍将拥有相同的内存管理功能/限制.

编辑3:关于终结器的这个维基百科aritcles提供了一些关于在终结器中适当做什么的好指示.基本上,如果您正在创建一个可以访问关键资源的对象,或者您正在使用这样的对象,请实现IDispose和/或利用using语句.即使抛出异常,Using也会自动调用Dispose方法.这并不意味着你不需要给运行终结器提示......


Chr*_*isF 9

您不能强制 C#释放内存,但您可以通过调用请求 CLR释放未引用的对象

System.GC.Collect();
Run Code Online (Sandbox Code Playgroud)

有一种方法WaitForPendingFinalizers将"挂起当前线程,直到处理终结器队列的线程清空该队列".虽然你不应该打电话给它.

正如其他人建议前往MSDN获取更多信息.