高效的垃圾收集

FPG*_*PGA 3 c# garbage-collection

考虑以下对象

class someObject;
{
   public objectA A{get;set;}
   public objectB B{get;set;}
   public objectC C{get;set;}
   public objectD D{get;set;}
   //...
}
Run Code Online (Sandbox Code Playgroud)

在某些时候ObjectD,不再需要,但实例someObject仍然存在,并会为几个小时这样做,objectD占用了很多的内存,以便以后它的作用是做我没有将它设置为null.

  • 这是否意味着ObjectD一旦我将其设置为null ,内存将被释放?
  • 如果一个对象在某个范围内设置了很长时间,那么.NET会怎么做呢?

Ser*_*kiy 6

这是否意味着一旦我将其设置为null,内存将从ObjectD中释放出来?

它不是对象集null- 它对内存集中对象的引用null.并且对象将存在,直到垃圾收集器将收集它(如果您没有对此对象的任何其他引用).

看看垃圾收集的基本原理

  • 请注意,根据您选择的构建配置,垃圾收集器的习惯实际上是不同的.在修剪未使用的对象时,发布版本更加积极 (3认同)
  • @ user1492051看到我对其中一个问题的评论 - 确实可以强制收集,但这往往弊大于利..NET垃圾收集器实际上非常好,如果您自己强制使用它,则会冒很高的风险,因为您将对象推送到通常不存在的第2代和第3代. (3认同)