C#垃圾回收机制
C、C++语言中,new一个对象后要用delete()或者free()自己回收内存,而Csharp中,有一套自己的垃圾加收机制,那么,他什么时候会回改呢?
如果一个引用对象,没有指针再指向他的时候,这个对象就可以被回收。
注意:是可以被回收,而不一定马上就会回收,因为每回收一次就会耗费很多资源,所以,他会找时机。那么,如果我们确实要回收了,就当怎么办?
可以调用GC.Collection()。但一般情况下,不要去调用。
与此相关的一个知识点就是WeakReference,看一个例子
Person p1 = new Person();
WeakReference wr = new WeakReference(p1);
p1 = null;
GC.Collect();//不写可能IsAlive还为true
Console.Writeline(wr.IsAlive);
如果是弱引用,当p=null后,就可以回收这片内存了。但如果GC没有去回收,IsAlive便为True;