对话框的小问题。

时间:2021-12-05 17:33:56
我发现我的程序在每弹出一个对话框并关闭后,它所占用的内存并不释放,当然,第二次弹出是也不在增加。这应该不是我的程序问题,我试过建了一个空白工程,然后弹出它的About框,结果一样。问题是,我有没有什么办法可以强制令它释放这部分空间?

另外我还发现当我把应用最小化一次后,它可以释放大量的内存空间,我觉得这部分空间是不是也可以有办法回收?

谢谢

14 个解决方案

#1


销毁它,又那样的函数,查查csdn

#2


是吗?关注一下

#3


如果你想在关闭对话框时释放资源,可以这样写试试看:

  CDialog *dlg;
  dlg = new CDialog;
  *******//你要做的初始化参数或其他
  delete dlg;

另外,程序最小化其实是后台运行,这时如果程序没有任何操作的话,操作系统会将内存收回,将你的程序信息写入虚拟内存,这样可以收回大量的内存.

#4


delete this
DestroyWindow()
我都试过,没有用。

#5


不知道 "程序最小化其实是后台运行,这时如果程序没有任何操作的话,操作系统会将内存收回,将你的程序信息写入虚拟内存,这样可以收回大量的内存."这中说法是不是完全能解释上面提到的问题。
因为即使我再把它还原,它所占用的内存仍然低于甚至远远低于最小化之前的。

#6


不会吧!
如果你创建的是有模式对话框,点击OK后自动销毁,你也不能对它进行什么内存释放的操作!
如果你创建的是无模式对话框,退出后,一定要调用DestroyWindow()来释放内存!
有了这样的处理,肯定不会有内存泄漏了!
Good Luck!

#7


我并没说程序有内存泄露,我只是希望它能够在运行是尽量少占用一些内存。

#8


同意zhangjm(a明) 

#9


销畏它!

#10


Up,我还没得到满意的结果,希望大家继续帮手!

我发现我的程序在每弹出一个对话框并关闭后,它所占用的内存并不释放,当然,第二次弹出是也不在增加。这应该不是我的程序问题,我试过建了一个空白工程,然后弹出它的About框,结果一样。问题是,我有没有什么办法可以强制令它释放这部分空间?

另外我还发现当我把应用最小化一次后,它可以释放大量的内存空间,我觉得这部分空间是不是也可以有办法回收?
我并没说程序有内存泄露,我只是希望它能够在运行是尽量少占用一些内存。 
delete this、DestroyWindow() 我都试过,没有用。 

谢谢 

#11


“它所占用的内存并不释放”?你是根据什么得出这个结论的?

事实上,这部分内存已经释放。你下次调用CreateWindow,说不定就是使用这块内存。你为什么说内存并不释放?

#12


不信?
你可以用任务管理器查看某个进程占用的内存量,试着打开一个对话框看看.

#13


chenzhou35()你错啦
程序从他自己的堆里面分配内存,而不是从系统堆里面分配,程序运行时候就建立自己的堆,所以释放对话框这个进程占用的内存不一定变化的,到是分配内存的时候有可能堆不够用而变大。

#14


我想这个答案应该是我想知道的了。
给分了。
谢谢!

#1


销毁它,又那样的函数,查查csdn

#2


是吗?关注一下

#3


如果你想在关闭对话框时释放资源,可以这样写试试看:

  CDialog *dlg;
  dlg = new CDialog;
  *******//你要做的初始化参数或其他
  delete dlg;

另外,程序最小化其实是后台运行,这时如果程序没有任何操作的话,操作系统会将内存收回,将你的程序信息写入虚拟内存,这样可以收回大量的内存.

#4


delete this
DestroyWindow()
我都试过,没有用。

#5


不知道 "程序最小化其实是后台运行,这时如果程序没有任何操作的话,操作系统会将内存收回,将你的程序信息写入虚拟内存,这样可以收回大量的内存."这中说法是不是完全能解释上面提到的问题。
因为即使我再把它还原,它所占用的内存仍然低于甚至远远低于最小化之前的。

#6


不会吧!
如果你创建的是有模式对话框,点击OK后自动销毁,你也不能对它进行什么内存释放的操作!
如果你创建的是无模式对话框,退出后,一定要调用DestroyWindow()来释放内存!
有了这样的处理,肯定不会有内存泄漏了!
Good Luck!

#7


我并没说程序有内存泄露,我只是希望它能够在运行是尽量少占用一些内存。

#8


同意zhangjm(a明) 

#9


销畏它!

#10


Up,我还没得到满意的结果,希望大家继续帮手!

我发现我的程序在每弹出一个对话框并关闭后,它所占用的内存并不释放,当然,第二次弹出是也不在增加。这应该不是我的程序问题,我试过建了一个空白工程,然后弹出它的About框,结果一样。问题是,我有没有什么办法可以强制令它释放这部分空间?

另外我还发现当我把应用最小化一次后,它可以释放大量的内存空间,我觉得这部分空间是不是也可以有办法回收?
我并没说程序有内存泄露,我只是希望它能够在运行是尽量少占用一些内存。 
delete this、DestroyWindow() 我都试过,没有用。 

谢谢 

#11


“它所占用的内存并不释放”?你是根据什么得出这个结论的?

事实上,这部分内存已经释放。你下次调用CreateWindow,说不定就是使用这块内存。你为什么说内存并不释放?

#12


不信?
你可以用任务管理器查看某个进程占用的内存量,试着打开一个对话框看看.

#13


chenzhou35()你错啦
程序从他自己的堆里面分配内存,而不是从系统堆里面分配,程序运行时候就建立自己的堆,所以释放对话框这个进程占用的内存不一定变化的,到是分配内存的时候有可能堆不够用而变大。

#14


我想这个答案应该是我想知道的了。
给分了。
谢谢!