最近用.net做的一个项目,对内存管理方面的要求比较高,经常出现内存不能及时回收的情况,每当我下一次申请一块比较大的内存时就outofmemory了。设计层面不存在问题,我就想问下大家,GC.Collect()是不是立即挂起线程,然后进行垃圾回收?我把我想释放的资源dispose,置null,然后调用GC.Collect(),然后下一次再申请比较大的内存时,程序就挂了,内存溢出
但是让我抓狂的时,有时候可以申请内存,有时候出错。难道是GC.Collcet还没来得及回收???我总不能等着它回收完了我再进行我要的操作吧?用GC.WaitForPendingFinalizers()竟然也没用。有时还是会挂掉,随机的
我知道一般不应该主动调用GC.Collect(),但是我情况特殊。
请教csdn技术大牛,这种问题你们怎么解决。
但是让我抓狂的时,有时候可以申请内存,有时候出错。难道是GC.Collcet还没来得及回收???我总不能等着它回收完了我再进行我要的操作吧?用GC.WaitForPendingFinalizers()竟然也没用。有时还是会挂掉,随机的
我知道一般不应该主动调用GC.Collect(),但是我情况特殊。
请教csdn技术大牛,这种问题你们怎么解决。
private bool _disposed = false;
public void Dispose()
{
Dispose(true);
} private void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
GC.SuppressFinalize(this);
}
_disposed = true;
}
}
GC的是.NET中对内存管理的一种功能。垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。
托管代码的堆上的垃圾内存可由GC自动回收,非托管代码中堆上的垃圾内存必须程序员自己负责释放、回收