普通的一个windows Form 一编译运行就会点用7M以上的内存。当改变WindowState为Minimized时却仅占用1M多一点点的内存。哪位高手能解释一下。如何手动控制内存的释放?多谢多谢。

解决方案 »

  1.   

    System.GC.Collect(); 回收资源
      

  2.   

    不知道你的form用来干什么了。
    估计是加载的东西过多,Minimized得时候小说明了这点
      

  3.   

    当改变WindowState为Minimized时,系统做了些什么呢?高手指点?
      

  4.   

    System.GC.Collect(); 也不能立即释放
    System.GC.Collect(2);会释放的快些。
      

  5.   

    7m是可以理解的,.NET提供的窗体资源比较丰富,内存自然要耗得多一点;还需要有CLR再入后占用的内存(提供多个不同线程来维护应用程序)。当最小化之后,内存占用变少是windows机制,当一个程序处于inactive状态的时候,它的物理内存会被压缩,一部分数据会被缓存到硬盘,实际也就是虚拟内存。
      

  6.   

    可是当一个.net程序从最小化再变为最大化时,所占内存还是那么少.
    这跟windows机制应该也有关系.
    非托管程序也有这种现象,只是没有这么明显罢了.
    可能是托管程序刚运行时需要额外的内存,而运行起来以后这部分内存就可以释放了.
      

  7.   

    多谢以上达人。
    To Hemee() 如何手动更改inactive状态?我想实现的只是把它占用的内在降的小一些。仅建一个空的Form,运行就会占用这么大的内存,总不是一件好事吧。大伙可以自己试试。不只是内存条长不长价的问题。
      

  8.   

    楼上达人?说的太轻松了吧?
    现在不是说有没有必要的问题。
    而是为什么它会占用本不应该占用的内存???为什么刚开始的时候占用最大,最小化之后会占用很小,从最小化恢复normal后仍占用很小。如果我运行一个程序,不把它最小化,难道那些刚开始运行占用的内存它会一直占有????引用:
    7m是可以理解的,.NET提供的窗体资源比较丰富,内存自然要耗得多一点;还需要有CLR再入后占用的内存(提供多个不同线程来维护应用程序)。当最小化之后,内存占用变少是windows机制,当一个程序处于inactive状态的时候,它的物理内存会被压缩,一部分数据会被缓存到硬盘,实际也就是虚拟内存。可是当一个.net程序从最小化再变为最大化时,所占内存还是那么少.
    这跟windows机制应该也有关系.
    非托管程序也有这种现象,只是没有这么明显罢了.
    可能是托管程序刚运行时需要额外的内存,而运行起来以后这部分内存就可以释放了.