假设有以下代码:

foreach (...)
{
    List<int> localList = new List<int>(100);

    // do stuff

    localList = null;
}

不时地,我很想在过程即将退出(即返回)或在这种情况下(即将循环)时将空引用设为空。即使这样做很小,这样做有什么好处吗?

最佳答案

对局部变量执行此操作没有任何好处。 CLR通过JIT知道何时在方法中不再使用局部变量并因此将其收集起来的确切时间。

雷蒙德•陈(Raymond Chen)最近发表了一篇非常深入的博客文章,确切地说明了什么时候可以收集物体。它详细介绍了此场景,值得阅读

  • http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10/10048149.aspx

  • 但是,此规则有两个异常(exception)。如果将所讨论的局部变量捕获到闭包或迭代器中,则可以使该变量无效会起作用。也就是说,因为本地不再是本地,而是一个字段,并且具有不同的GC语义。

    关于.net - 取消对 "encourage".NET垃圾回收的引用有什么好处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3550033/

    10-08 23:09