发现自己的程序占用了太多的内存
编号:QA004214
建立日期: 2001年5月24日 最后修改日期:2001年5月24日
所属类别:
江雯:
操作系统:windows Me & Windows NT 5.0
编程工具:VB6.0企业版
问题:我想问一下关于应用程序优化的问题,我不想等到程序写完了,才发现自己的程序占用了太多的内存。本想用个API将进程隐藏起来可这不是办法,虽然软件是免费的,但我要对程序负责。现在除了菜单,界面部分已经差不多了。我将其编译成可执行文件并运行,可结果吓死我了,用Windows 2000 的任务管理器查看 它占用了3600Kb 可在显示几个窗体后内存占用竟高达 8300Kb,我已经在程序里尽可能的使用控件组了,PictureBox控件的使用也未超过20个。我在用Bitblt搬完图以后将都加入了这条语句AutoRedraw =False,在QueryUnload事件里加入了PictureBox=Loadpicture(""),Set frm-Nothing 不知这2条语句会不会在某个窗体卸载时释放一些内存。还有没有别的办法来减小内存的使用。最后我想问一下有什么软件可以准确的测试出软件的内存占用率,及CPU占用率。Windows 2000 的任务管理器好象反应迟钝。
回答:
请检查以下几点:
1、为了减少内存,请尽量在用完一个窗体后马上把这个窗体Unload掉,而不是使用Hide方法,而且,Unload语
句必须在窗体外部执行,比如说:
MyWin.Show
……
……
……
Unload MyWin
同时你要保证这个窗体中的所有控件此时都没有被别的对象引用。具体请参考Msdn中的对象生存期部分内容。
如果QueryUnload事件根本就不执行的话,在事件里加入什么都没用。
2、如果你的图太大,那占内存多也是没有办法的事,再加上第一条的情况的话,就更多了。
3、如果有可以重复使用的控件和变量,请不要再使用新的。
4、检查申请的临时内存是不是在用完后都归还了,尤其是在使用了Bitblt之后。
5、VB有一些会浪费内存的BUG,要是碰上,就只能等补丁。
注意了以上几条,内存的使用可以降到最低。
此问题由fatworm回答。
| |
|
|
| |
|
|