怎样在关闭对话框时同时释放对话框所占用的所有内存?(模式和非模式)?

VC++在模式对话框中,我关闭对话框用的是OnOK,关闭之后查看任务管理器发现占用内存还是保持不动,不知道怎么才可以使关闭对话框之后,占用内存恢复到未打开对话框之前,也就... VC++
在模式对话框中,我关闭对话框用的是OnOK,关闭之后查看任务管理器发现占用内存还是保持不动,不知道怎么才可以使关闭对话框之后,占用内存恢复到未打开对话框之前,也就是说把所占用的内存都释放掉
展开
 我来答
匿名用户
2011-04-02
展开全部
s中纵横驰骋时,是否遇到过“内存不足”的错误提示信息,而不能运行程序或完成所需操作的情况?此时,愿下述的六种方法能为你解燃眉之急。

一、剪贴板占用太多的内存
剪贴板是内存中的一块临时区域,用以存放从程序复制来的对象(如文本或图形)。如果剪贴板中现存放的是一幅图画或相当篇幅的一段文本,则占用相当大的内存,可能导致内存不足。解决方法就是清除剪贴板中的内容,具体过程是:
1、单击“开始”,指向“程序”,指向“附件”,指向“系统工具”,单击“剪贴板查看程序”,打开“剪贴板查看程序”窗口(如图2)。
2、单击“编辑”菜单中的“删除”命令,系统弹出“清除剪贴板”对话框,单击“是”按钮。
3、单击“文件”菜单中的“退出”命令,关闭“剪贴板查看程序”窗口。

二、运行的程序太多
运行的程序太多,会引起内存资源的枯竭。这分为两种情况,一是在启动Windows后,用户运行的程序太多,或者在同一程序如Word中同时打开的文档过多,就可能引发内存不足,从而没有足够的内存运行其它程序或在程序中完成某一操作。解决的方法是退出当前未使用的程序、关闭当前文档外的所有文档,或者重新启动计算机。
另一种情况是在启动Windows时自动运行的程序太多。如果在启动Windows时自动运行的程序太多,那么即使重新启动计算机,也将没有足够的内存用于运行其它程序。以下的方法可以确定自动运行的程序是否太多,具体过程是:
1、单击“开始”菜单中的“运行”命令,系统弹出“运行”对话框,在“打开”框中键入“Msconfig”,单击“确定”按钮,打开“系统配置实用程序”窗口。
2、选择“常规”选项卡,选中“选择性启动”复选钮,清除“处理Win.ini文件”和“装载启动组项目”复选框(如图3)。
3、单击“确定”按钮,当系统提示重新启动计算机时,请单击“是”按钮。
此时,如果内存不足的问题已经解决,就可以将计算机设置为启动时不打开任何程序,方法是:
(1)在Msconfig中设置为“正常启动”,具体过程是:
A、打开“系统配置实用程序”窗口,选择“常规”选项卡;
B、选中“正常启动”复选钮,单击“确定”按钮;
C、当系统提示重新启动计算机时,单击“是”按钮。
(2)删除“启动”文件夹中的快捷方式,具体过程是:
A、单击“开始”,指向“设置”,然后单击“任务栏和开始菜单”,系统弹出“任务栏 属性”对话框;
B、选择“开始菜单程序”选项卡(如图4),单击“删除”按钮,系统弹出“删除快捷方式/文件夹”对话框;
C、在列表框中找到“启动”文件夹,单击其前的加号“+”(如果“启动”文件夹前没有加号,则表明没有设置为自动运行的程序,单击“关闭”按钮即可),以显示设置为自动运行的程序列表;
D、单击“启动”文件夹中的一个快捷方式,然后单击“删除”按钮(如图5)。此操作将从“开始”菜单中删除快捷方式,但并不从硬盘中删除相应的程序。对于“启动”文件夹中的要删除的每一个快捷方式,重复此步骤;
E、单击“关闭”按钮,关闭“删除快捷方式/文件夹”对话框;
F、单击“确定”按钮,关闭“任务栏 属性”对话框。
(3)禁用从Win.ini文件加载的所有程序,具体过程是:
A、打开“系统配置实用程序”窗口,选择“Win.ini”选项卡;
B、双击“〔Windows〕”,清除“Load=”和“Run=”复选框(如图6);
C、单击“确定”按钮。

三、硬盘空闲空间不足
Windows以虚拟内存分页文件(Win386.swp)的格式使用硬盘空间,以模拟RAM(Random Access Memory的缩写,随机存储器,内存的一种)。如果硬盘中没有足够的可用空间用于虚拟内存分页文件,则会引起内存不足的错误。Windows虚拟内存分页文件Win386.swp(该文件保存在c:\Windows文件夹中)所在的驱动器最少需要的空闲空间就是该文件的大小。如果硬盘空闲空间不足,请增加磁盘可用空间,有三种方法:
1、清理磁盘。具体过程是:
(1)单击“开始”,指向“程序”,指向“附件”,指向“系统工具”,单击“磁盘清理程序”,系统弹出“选择驱动器”对话框。
(2)单击“驱动器”下拉列表框右边的下三角箭头,选择要清理的磁盘,然后单击“确定”按钮(如图7)。稍候,系统弹出“磁盘清理程序”对话框。
(3)在“要删除的文件”框中,复选要删除的文件类型(其后的数字是该类文件所占用的磁盘空间量),单击“确定”按钮(如图8)。
2、从磁盘中删除过期的不需要的文件。
3、删除从未使用过的文件。

四、让Windows管理虚拟内存
如果你的机器没有设置为让Windows管理虚拟内存,则启动计算机时可能会有问题,计算机可能无法正常工作,也可能收到“内存不足”的消息,或在运行某程序时出现相同的错误消息。设置让Windows管理虚拟内存的具体过程是:
1、单击“开始”,指向“设置”,单击“控制面板”,打开“控制面板”窗口。
2、双击“系统”,系统弹出“系统 属性”对话框中,单击“性能”选项卡,然后单击“虚拟内存”按钮(如图9),系统弹出“虚拟内存”对话框。
3、选中“让Windows管理虚拟内存设置—推荐”复选钮,单击“确定”按钮(如图10)。
4、单击“确定”按钮,关闭“系统 属性”对话框。

五、程序毁坏或病毒作怪
如果某个程序文件被毁坏,则可能导致内存问题。程序损坏后,我们只能删除并重新安装该程序。
如你的电脑感染了电脑病毒,同样可能引起内存不足的错误,导致程序不能运行。这时使用最新的防病毒软件查杀病毒后,内存不足的问题自然也就解决了。

六、请专业人员处理
如果你做了上述五项工作,内存不足的问题仍未解决,那就请你与系统管理员联系,寻求帮助。

1、检查C盘是否空间已满
2、到系统属性里检查虚拟内存设置,如果为内存的2倍以上就没问题。
3、如果以上2种都正常,就要查毒了。

一般windows默认下,虚拟内存最小值应为实际内存的1.5倍,最大值则为实际内存的3倍。

一般应用的话,windows默认的虚拟内存是够用,如果是运行那些比较吃内存的程序内存吃紧,就要适当加大虚拟内存(特别是在XP系统下),再不行就要考虑加大实际内存容量了!:em9
大家知道,系统内存的容量总是很有限的;尽管通过设置适当的虚拟内存,可以有效缓解系统内存不足的现象,可是系统内存资源总是会有被消耗完的时候。一般情况下,系统内存资源被消耗30%左右时,计算机运行速度就会明显下降,此时你就必须想办法对内存采取各种优化措施。为了能够确保内存优化及时到位,就必须要对系统内存容量的变化进行即时监视。要监视系统内存的变化,比较简单的方法,就是用鼠标右键单击系统任务栏,从弹出的快捷菜单中,执行“任务管理器”命令;接着单击“任务管理器”窗口中的“性能”标签,在弹出的图1标签页面中,就能查看到当前系统内存的容量大小了。

剪贴内容,及时清除

每次执行复制、剪切操作时,被复制或被剪切的内容都会临时保存到系统内存中,倘若你复制的内容是一张图象或者是容量较大的内容的话,系统内存空间就会被占用不少,那么系统自身所能获得的内存容量将非常有限。为了能够消除系统内存不足的现象,你应该及时将剪贴板中的无效文件或图像清除掉。在清除剪贴板中的大容量信息时,可以按照如下步骤来进行:

依次单击“开始”/“程序”/“附件”/“系统工具”选项,从弹出的下拉菜单中执行“剪贴板查看程序”命令,在随后出现的“剪贴板查看程序”窗口中,单击菜单栏中的“编辑”选项,再单击下拉菜单中的“删除”选项,这样系统就能自动将保存在内存临时存储区域中的剪贴板内容清除了,那么系统的内存空间就会释放出来。

点击看虚拟内存及优化方法

打开 计算机管理(本地)。
在控制台树中,右键单击“计算机管理(本地)”,然后单击“属性”。
单击“高级”选项卡上的“性能选项”,然后在“虚拟内存”下面单击“更改”。
在“驱动器”列表中,单击包含要更改的页面文件的驱动器。
在“所选驱动器的页面文件大小”下面的“初始大小 (MB)”或“最大值 (MB)”框中以兆字节为单位键入新的页面文件大小,然后单击“设置”。
如果减少页面文件设置的最小值或最大值,则必须重新启动计算机来查看改动效果。增大通常不要求重新启动计算机。

为获得最佳性能,请将初始大小设成低于“所有驱动器上页面文件大小的总数”下的推荐大小。推荐大小等于系统随机存取存储器 (RAM) 数量的 1.5 倍。
通常,尽管日常使用需要大量内存的程序可能会增加页面文件的大小,但应当将页面文件保留为推荐大小。
要删除页面文件,请将初始大小和最大值都设为零。
另外,虚机团上产品团购,超级便宜
C_stu
2011-04-02 · TA获得超过456个赞
知道小有建树答主
回答量:694
采纳率:0%
帮助的人:627万
展开全部
= = 这个很简单的啊.. 对话框的界面关不关闭都跟内存的完全释放没关系的...
对象的生命周期结束, 那么对象所占的内存一般都会释放的..(xxPool神马的..内存泄露神马的就不管了..那不是你的问题..) 于是..

before code xxx
{
modeDlg dlg;
dlg.Popup();
}
after code xxx

= = 嘛..MFC差不多忘干净了..你懂意思就行了.. {}是亮点, 模式Popup过后肯定是对话框消失了..然后dlg遇到}析构~自然会释放资源的..= = 如果是modeDlg *dlgPointer的话, 就不用{}了..直接delete dlgPointer即可..

至于非模式的差不多...都是让对话框在消失的时候紧接着析构就行了...= =

最后说点题外的...其实完全没必要让它消失的时候就释放资源..只要把dlg放在类里面或者其他神马持久的..每次调用的时候都省去了构造的开销..消失的时候也省去了析构的开销..那点资源不碍事的 = =
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
初深意神帅21
2011-04-01 · 超过20用户采纳过TA的回答
知道答主
回答量:148
采纳率:0%
帮助的人:68.7万
展开全部
哦 不是很明白你说的意思
那我就按照常见的内存分配类型吧
如果是通过动态内存分配的,需要手动删除
如果不是通过动态内存分配的,关闭对话框 系统会帮你清理

不过对于非模态对话框一般都是通过动态内容分配来建立的,
需要在非模态对话框的对应线程类中(一般是析构函数)调用 delete ,删除你创建的对话框
而模态 就不用管了 系统清理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ll3096
2011-04-03 · TA获得超过108个赞
知道答主
回答量:96
采纳率:0%
帮助的人:110万
展开全部
在WM_DESTROY事件中添加释放内存的代码,如果是非模态对话框,再加delete this就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shinegoo
2011-04-01 · 超过12用户采纳过TA的回答
知道小有建树答主
回答量:75
采纳率:0%
帮助的人:35.7万
展开全部
用 delete ,比如 delete dlg;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式