现在做过C/S项目,窗口可能要打开N天天。。,希望释放其中占有的内存,想先测试一下,看了knight94 写的BLOG,还是不怎么明白,现在做个测试,希望大家指教,
做一个FORM,2个BUTTON,一个做释放用,一个做创建用,创建下填写,for (int i=0;i<this.textBox.text;i++){
//一个带属性的类
  classA a=new classA();
  a.name=1;
  a.sex="asdfasfasdf";
//为了在循环中看内存资源变化。
}
在第二个按钮下添加 GC.SuppressFinalize (this);
现在不可以手动的内存回收,如果谁有好的方法请告诉我。谢谢,很急,在线一直,解决马上给分,希望给出好的建议,http://blog.csdn.net/Knight94/archive/2006/08/05/1023352.aspx
这个应用不用发了,看过了。如果我想做一个演示,内存释放好使,怎么做,上面的例子就是为了演示。

解决方案 »

  1.   

    强制垃圾回收,性能也不高,在执行时很耗CPU.
      尝试直接将不用的资源设置为null
      

  2.   

    不用的资源GC自动回收的。。你只要在程序将不用的资源及时回收,一般来说放n天也没什么问题。。
      

  3.   

    一般来说调用GC.SuppressFinalize (this);
    这是因为你自己已经调用了Dispose();
    因为本身GC都会自动的调用Dispose();执行GB.SuppressFinalize(this)是告诉GC不要再次调用了,但是你要知道GC是怎样工作的,它采用非常复杂的算法,会在后台判断什么时候该回收内存,所以GC的工作你并不需要去管,即使你调用GC.Collect()强制执行,GC也有可能不会马上执行的,如果执行你的程序会停滞。所以.NET的程序对于内存回收这一块是没有C++强的,不过也少了一些C++的内存泄露。
      

  4.   

    GC.SuppressFinalize (this);这个函数是阻止对一个对象的终结,所以你的程序长时间运行,内存肯定不断增加.
    如果要保持内存基本不变,定时启用:
                    int gen = GC.GetGeneration(this);//对象当前所在代
                    GC.Collect(gen);
      

  5.   

    ref:
    http://blog.csdn.net/knight94/archive/2006/08/05/1023352.aspx