最近用.net做的一个项目,对内存管理方面的要求比较高,经常出现内存不能及时回收的情况,每当我下一次申请一块比较大的内存时就outofmemory了。设计层面不存在问题,我就想问下大家,GC.Collect()是不是立即挂起线程,然后进行垃圾回收?我把我想释放的资源dispose,置null,然后调用GC.Collect(),然后下一次再申请比较大的内存时,程序就挂了,内存溢出
但是让我抓狂的时,有时候可以申请内存,有时候出错。难道是GC.Collcet还没来得及回收???我总不能等着它回收完了我再进行我要的操作吧?用GC.WaitForPendingFinalizers()竟然也没用。有时还是会挂掉,随机的
我知道一般不应该主动调用GC.Collect(),但是我情况特殊。
请教csdn技术大牛,这种问题你们怎么解决。

解决方案 »

  1.   

    光靠GC.Collect() 解决不了问题吧。
      

  2.   

    在.NET的对象中实际上有两个用于释放资源的函数:Dispose和Finalize。Finalize的目的是用于释放非托管的资源,而Dispose是用于释放所有资源,包括托管的和非托管的。  
    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自动回收,非托管代码中堆上的垃圾内存必须程序员自己负责释放、回收  
      

  3.   

    帮你顶,我也与到一样的问题,我用VB.NET 楼主如果找到解决方法劳烦贴出来分享一下