以前还真没注意到这事情,最近编了一个实时监测系统文件改变的小程序(被病毒吓怕了,决定自己动手跟它较量一下),小弟我只是粗浅的懂一些VB语言,所以,没想到内存之类的占用问题(还好机器够爽)。    最近偶尔打开任务管理器,一看之下,我的程序居然占了十来兆的内存!!晕了,这是怎么回事?无意间最小化了一下窗体,结果任务管理器中的内存占用率一下子就降下来了,只有不到一兆了。晕了,这是怎么回事,为什么最小化窗体能够带来内存资源被释放的效果呢??我试过其它的操作,比如移动窗口位置、改变窗口尺寸,都不能释放内存;只有最小化才可以。而且不论是点击最小化按钮还是在程序中使用 Form1.WindowState=1 语句效果都是一样的,应用程序占用的内存会锐减,而这正是我想要的效果。但是总不能来回的最小化窗体吧??这样也不好看,闪来闪去的,搞不好还以为是木马程序呢。    所以想问一下 VB 中,除了最小化窗体这种“笨”方法,还有没有能迅速释放应用程序占用内存的办法??

解决方案 »

  1.   

    这个不是VB的问题,所有的Windows程序都是这样的
    最小化时,不需要绘制窗体等控件,所以占用资源就少了
      

  2.   

    和这个差不多1 。当我们的应用程序刚刚加载完成时,可以使用该操作一次,来将加载过程不需要的代码放到虚拟内存,这样,程序加载完毕后,保持较大的可用内存。VB尤甚2.程序运行到一定时间后或程序将要被闲置时,可以使用该命令来交换占用的内存到虚拟内存。
    最后,附上VB 调用的API 代码Option Explicit
    Private Declare Function SetProcessWorkingSetSize Lib "kernel32" (ByVal hProcess As Long, ByVal dwMinimumWorkingSetSize As Long, ByVal dwMaximumWorkingSetSize As Long) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    SetProcessWorkingSetSize GetCurrentProcess, -1, -1将 2个   SIZE_T   参数设置为 -1 ,即可以使进程只保留一小部分必要的内存,请放在适当的地方