将null赋值给变量强制释放内存或置换变量

时间:2016-04-13 09:34:27

标签: c# vb.net

任何人都可以告诉我

  1. 使用后将null分配给变量有什么好处?
  2. 在处置对象后分配null是什么意思?
  3. GC如何运作?
  4. 提前致谢

1 个答案:

答案 0 :(得分:2)

  1. null(C#)或Nothing(VB)分配给变量时,会删除对先前分配的对象的引用。一旦没有对象的引用,它就有资格进行垃圾收集,即将占用的内存返回给系统。

  2. 与1.相同。处置对象会释放对象持有的任何托管或非托管资源。该对象占用的内存不被视为用于这些目的的资源。

  3. 除此之外还有更多内容,但GC的目的是将未使用的内存返回系统进行重新分配。如果没有对该对象的托管引用,它只能回收对象占用的内存,这就是为什么如果您不再使用该对象,则将长寿命变量置零很重要。局部变量很少被认为是长期存在的,因为一旦方法完成它就会失去范围。一个长期存在的变量的一个很好的例子是WinForms应用程序的启动形式中的一个字段,它几乎在应用程序的整个生命周期内保持不变。 如果对象已被丢弃,它也只能回收一次性对象占用的内存。这就是为什么在一个物体完成后如果它支持处置就丢弃它的重要性。如果你没有,那么当GC第一次尝试回收对象占用的内存时,它将无法进行回收。它必须首先完成对象的最终处理,然后再次尝试回收内存。