举个最简单的例子,一个空的winform,添加新建项里面选择关于框,产生一个aboutbox窗体,在form1里面加入一个button1,代码如下:
        private void button1_Click(object sender, EventArgs e)
        {
            AboutBox1 thisFrom = new AboutBox1();
            thisFrom.ShowDialog();
        }
调试过程中,打开一次aboutbox窗体,内存增加一点,关闭后并没有减少。
我在做复杂的向导对话框时内存增加更多,怎么才能释放占用的内存呢?

解决方案 »

  1.   

    应该问题不是出在你这两个语句上.找找其它的,虽然.NET有强制内存回收,但是我想也没什么作用.GC.Collect();
      

  2.   

    获得showdialog的返回值
    在返回后清理
      

  3.   


    thisFrom.ShowDialog();
    之后加上
    thisFrom.Dispose();
      

  4.   

    那这样的放,每次都要放一个dispose吗?还想问借楼主的帖子问一下.
    如果一个项目比较大,那是不是应该每show一个窗体都dispose一下呢
      

  5.   

    dispose没效果,最初我就是这样的
      

  6.   

    获得showdialog的返回值
    在返回后清理怎么返回?我就和Knight94(愚翁) 一样处理的。
      

  7.   

    要区分对象释放和内存回收是两回事。对象调用dispose,只是说明对象所占用的资源不再使用,但是GC回收它是不确定的。
      

  8.   

    我用两个空winform做实验,在form1添加button,        private void button1_Click(object sender, EventArgs e)
            {
                Form2 thisform = new Form2();
                thisform.ShowDialog();
                thisform.Dispose();
            }form2是一个空winform
    运行程序,内存17048k
    执行button,内存17224k
    关闭form2,内存17554k,
    经过此测试,内存占用有所不同,但趋势相同,内存没有下降,反而上升,当form2复杂时情况更明显
      

  9.   

    那么Knight94(愚翁)有解决的方法吗?总不见的每次showdialog内存都有所上升吧,那多打开几次对话框内存还剩多少啊?(每次重新打开发现内存有所上升,大幅度减小)
    我做的向导对话框打开一次要好几兆阿
      

  10.   

    Have a try!
    private void button1_Click(object sender, EventArgs e)
    {
    GC.Collect();//Call gc to collect garbage
    Form2 thisform = new Form2();
    thisform.ShowDialog();
    thisform.Dispose();
    }
      

  11.   

    没有执行click时内存10480k左右,执行若干次click事件后内存最终稳定在11688k。
      

  12.   

    将GC.Collect()放到dispose()后面确实释放了占用的20%左右的内存,只能这样吗?不能却不释放吗?
      

  13.   

    你可以先把form1.Hide().然后再Show()。这样内存就可以快速释放了