日期:2014-05-18  浏览次数:20421 次

GC垃圾回收的问题
string s="aaa";
s=null;
 GC.Collect();
//是不是把s回收了?
s="pp";//如果我加上这一句,为什么s还能用?

------解决方案--------------------
string是引用类型;
string s="aaa"; 这句应该是在堆栈上分配一个地址变量;然后在托管堆中分配一个对象,将将堆栈中的地址指向它;
s=null; 将原本指向“aaa"的引用指向一个空引用,但堆栈上的变量还在;
s="pp"; 重新指向一个新引用;
------解决方案--------------------
GC.Collect()只是告诉垃圾收集器,要进行收集,是否回收,取决于垃圾收集器。


------解决方案--------------------
具体垃圾收集机制可以读一读msdn. 说实在的我也没有仔细读过。。。。

http://msdn.microsoft.com/en-us/library/ee787088.aspx