c#内存释放

c#会自动释放托管代码生成的内存,但是其释放的时间不及时,对于大数

块的多次读入会导致内存溢出异常,例如:
class A
{
public void mothed()
{
for(int i=0;i<10;i++)
{
//读取大量数据
DataTable dt=DataBaseOper.select("select *...");
}
}
}
上面的代码运行会看到内存占用一直上升,直到内存溢出。
内存的释放,是在使用内存的那个类被销毁且在该类再次创建对象的时刻

销毁的,根据这个发现,改造上面代码为:
class A
{
public void mothed()
{
for(int i=0;i<10;i++)
{
using(B b=new B())
{
b.exeM();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
}

class B: IDisposable
{
DataTable dt;
public void exeM()
{
//读取大量数据
dt=DataBaseOper.select("select *...");
}
//该方法强制销毁内存
public void Dispose()
{
dt = null;
GC.Collect();
}
}
或者不用using,使用try{}catch{}finally{b.Dispose();}。

你可能感兴趣的:(C#)