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;

posted @ 2012-04-06 13:04  伯箫  阅读(387)  评论(0编辑  收藏  举报