对于一个 窗体控件用 this.Close()
和 this.Dispose()写一起可以么?为什么dispose后 占用的内存越来越多呢?

解决方案 »

  1.   

    Close是关闭窗体
    Dispose是释放此类占有的资源Close方法是和Close事件相配合的,而Dispose可以在任何我们需要删除这个窗体的时候调用。虽然一般来说关闭窗体意味着把窗体类的资源释放掉,但是也不是绝对的。
    好比看电视一般来说是指欣赏电视节目,但是停电的状态下你也是可以盯着电视机瞅的。当然作为初级的应用来说,把这两个方法当成一个其实没多大关系 ps:你凭什么说dispose后 占用的内存越来越多?
      

  2.   


    兄弟你怎么测得,能具体说说么?PS:你确定是dispose()方法引起的么,没被其它因素干扰?
      

  3.   


    很多实践都证明了 close 是会关闭窗体并且释放资源的,而且不只是释放内存而已。同时,释放内存不是 close 决定的,而是 GC 决定的。所以,与其怀疑 MSDN 说谎, 我宁愿相信你的测试有问题
      

  4.   

    可以。不过建议使用using语句
    using(类 类1=new 类())
    {
        代码.....
    }
    这样可以自动释放
      

  5.   

    不管close还是dispose都不可能会让内存增加的,最多暂时保存不变,
      

  6.   

    Dispose是释放此类占有的资源 后你的内存越来越大 , 哪倒是奇怪 , 应该不会。
    除非 你释放的那个资源,是锁住的 排队的太多 倒是有可能。
    解决方法, 管理一下你的进程和线程吧。
      

  7.   

    一般来说Close都是调用Dispose方法的
    有些Dispose是调用Close方法的。
    作用是一样的,释放资源。这里资源主要是指非托管资源,比如文件句柄,窗体句柄。系统释放非托管资源是通过Finalize方法的,但是这个方法我们是无法调用的,也就不能确定他什么时候被调用。
    所以为了提供这种显示控制的功能,就是用了Dispose模式,所有定义了Finalize方法的类型都必须实现Dispose模式。保证非托管资源不会泄露.NET框架设计中讲的很详细
      

  8.   

    .net程序在跑的过程中,是会出现内存以8K或其他步幅增加的情况,但那不是由dispose带来的。
    那是由于你的程序在一段时间以内在不断的执行,由于需要用到局部变量等等而增加但还没有及时回收所造成的现象。