c#的内存回收机制。.net垃圾回收器GC对托管资源和非托管资源的释放是不一样的。
namespace CSharpGC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ManagedCode a = new ManagedCode();
GC.Collect();
}
private void button2_Click(object sender, EventArgs e)
{
GC.Collect();
NativeCode b = new NativeCode();
GC.Collect();
}
}
/// <summary>
/// 之含有托管代码的类
/// </summary>
public class ManagedCode
{
~ManagedCode()
{
MessageBox.Show("析构了 ManageCode");
}
}
/// <summary>
/// 含有非托管代码的类
/// </summary>
public class NativeCode:IDisposable
{
public FileStream fs = new FileStream(@"c:/1.txt", FileMode.Open);
~NativeCode()
{
fs.Close();
fs.Dispose();
MessageBox.Show("析构了 NativeCode");
}
#region IDisposable 成员
void IDisposable.Dispose()
{
fs.Close();
fs.Dispose();
}
#endregion
}
}