C# Winform 窗体最小化时都干了什么?
应用程序,窗体最大化时占用50M以上内存资源,最小化后占用1M,恢复后占用10M。
这么大的差别,在窗体最小化时到底做了些什么?
------解决方案--------------------关注...
------解决方案--------------------窗体最小化的时候会释放一些内存使用量
//估计是和GDI有关的内存
但虚拟内存是不会因此而减小
------解决方案--------------------應該和正常狀態下沒有太大區別﹐省略了圖形開銷。
試了一下確實是你說的那樣﹐不過很可能和C#的內存回收機制有關﹐在運行時﹐C#的內存回收很不盡人意啊﹗
------解决方案--------------------可以这样理解,窗体在显示的时候需要系统资源来存放窗体上的控件等的信息.比如窗体越大占的内存越多.
------解决方案--------------------窗体重绘的速度会减缓,开销也就 下降了
------解决方案--------------------Onpain事件不会做
少去非常多的绘制操作。
由于是非Active的,所以许多消息也没有监听到。又省了很多。
------解决方案--------------------个人认为,在窗体被激活时,所有控件所能用到的变量会被分配内存(比如textbox,它的text属性就会被分配内存,也就是其string变量被分配内存,以及保证其运转的相关内存),所有控件处于等待状态,这好像是为了保证运行速度的一种机制.当然也包括显示界面所花费的资源等内存,最小化失去焦点后 内存可能就会被回收,只剩余保证其生存的内存
__________________
个人意见,欢迎拍砖.
------解决方案--------------------对话框显示时所有的界面元素都要显示,OS要在内存中记录颜色状态等一系列信息,因此内存消耗较大,当最小化OS只需记录很少的信息,比如颜色不用画出来,内存占用较少
------解决方案--------------------最小化实际上是把窗体放到了一个负值区间(如果XOY第一象限是屏幕的话),这样,大部分GDI对象都不必重画,并释放维护重画动作所需要的对象.
------解决方案--------------------一直都是10M,最小化的时候,会认为你暂时不会使用,至少这个暂时对cpu而言是比较长了。他就把程序内存(猜测是连续页的部分)放到了硬盘上缓存起来,激活窗体或者还原的时候再挪回到物理内存中。
------解决方案--------------------接分
------解决方案--------------------大部分是GDI占内存吧!
------解决方案--------------------最小化窗体不会再重绘自身与及子控件。当然占用的资源会少很多。。。