static void Main(string[] args)
{
//TestOperator();
MemoryTest obj = new MemoryTest();
obj = null;
GC.Collect();
GC.WaitForFullGCComplete();
Console.ReadKey();
}public class MemoryTest : IDisposable
{
public MemoryTest()
{
Console.WriteLine("MemoryTest.Construct called.");
} public void Dispose()
{
Console.WriteLine("MemoryTest.Dispose called.");
}
}为什么不执行Dispose?
{
public MemoryTest()
{
Console.WriteLine("MemoryTest.Construct called.");
} public void Dispose()
{
Console.WriteLine("MemoryTest.Dispose called.");
} ~MemoryTest()
{
Console.WriteLine("in finalizer");
}
}
static void Main(string[] args)
{
for (Int32 i = 0; i < 100; i++)
{
MemoryTest obj = new MemoryTest();
obj = null;
GC.Collect();
}
GC.WaitForFullGCComplete();
Console.ReadKey();
}
~public MemoryTest()
{
Dispose();
}
托管代码的堆上的垃圾内存可由GC自动回收,非托管代码中堆上的垃圾内存必须程序员自己负责释放、回收
在.NET的对象中实际上有两个用于释放资源的函数:Dispose和Finalize。Finalize的目的是用于释放非托管的资源,而Dispose是用于释放所有资源,包括托管的和非托管的。
http://topic.csdn.net/u/20100727/15/bae88ccb-620e-4dca-ad90-d06d7f43741f.html?seed=1305171008&r=67274599#r_67274599