为什么MFC程序占用内存很大

为什么MFC程序占用内存很大,第1张

你可以用Process Explorer查看到底什差告么占用了1G的虚拟内存;如果大部分被占用的虚脊明是Sharable的,那说野老明是系统调用的DLL。对于那些不是你程序经常使用的DLL,可以考虑使用链接选项/delayload

m_hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),m_Path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE)

这一句中LoadImage加载的橘唤颤资源需要释放,应该函数末尾处添链乎加一句

::DeleteObject(m_hBitmap)

你应该通过msdn查找LoadImage这个函数,你圆败会发现msdn上说明了这个函数需要手动释放资源。

类似LoadImage这样的函数还有很多。

提示“mfc100ud.dll丢失”。

解决之后文件变大很多。

使用VC2010生成的可执行程序移植到其他环境中运行,会提示“mfc100ud.dll丢失”。

于是用下面方法解决:

(1)configuration->Active(Debug)

configuration

properties->general->use

of

MFC,选择use

MFC

in

a

static

library。

(2)configuration->

debug

C/C++->code

generation->runtime

library->multi-threaded

debug(/MTd)

------解决方案--------------------------------------------------------你是将mfc的debug库静态编码到exe中了,所以变大。

------解决方镇衡行案--------------------------------------------------------1.程序移植到其他环境运行,需要其他机器上有相应版本的mfc.

否则就要用静态编译

2.而且一般用release版本。

------解决方案--------------------------------------------------------debug版的库一般都不release版的大很多

------解决方案--------------------------------------------------------被静态连接进去了,也就是说它的原代码直接编译到你的exe里面去了

你完全可以在你的发布项目中带上mfc100ud.dll

然后还是用动态连接,这样就不会增大体积了

------解决方案--------------------------------------------------------不要用静态编译!把缺少的库给添加上就可以了

------解决方案--------------------------------------------------------把

相应的的dll

拷贝到exe文件所在的目录下就成

------解决方案--------------------------------------------------------debug版本当然大了,用release版本

------解决方案--------------------------------------------------------你做成一个安装程序,把所有的文件都拷贝的安装目录下面,然后给你的EXE创建一个快捷方式,这拦局些事情都是安装工具帮你做好的御哗,你设置一下就行。用户通过快捷方式打开就可以了,别的什么都不用管。用户如果自己找到安装目录把这个DLL删掉了,那就是用户的事了。

不过发布版本还是用RELEASE版本比较好。

探讨引用:被静态连接进去了,也就是说它的原代码直接编译到你的exe里面去了

你完全可以在你的发布项目中带上mfc100ud.dll然后还是用动态连接,这样就不会增大体积了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8205390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存