使用qt 5.3 release生成的 *.exe文件与所需的dll文件使用Enigma Virtual Box_7.10工具打包后,运行内存(RAM)变得的很大了,在没有打包之前,把所需要的dll文件及目录与 .exe放在一起,更改了qt安装目录,执行.exe时,运行占内存只有7M左右,使用Process Explorer查看让所需qt dll,其路径都是与.exe相同,使用Enigma Virtual Box_7.10工具打包后,运行占的内存变为50M,查看 qt dll 其路径都是与.exe相同,也就是打包的dll。求解!为什么同一个.exe,同样的dll,打包前后,运行内存相关这么大?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Enigma Virtual Box 是一个应用程序虚拟化工具,它允许将程序所需的DLL和其他依赖文件打包到单一的可执行文件中,从而避免了在运行时需要外部文件的问题。当您使用 Enigma Virtual Box 打包您的 Qt 应用程序时,内存占用增加可能是因为以下几个原因:
加载机制变化:未打包时,操作系统和Qt框架可以按需加载DLL,即所谓的延迟加载(lazy loading)。这意味着不是所有DLL在程序启动时都会被加载到内存中,而是在实际需要时才加载。但当使用Enigma Virtual Box打包后,为了实现虚拟化效果,可能会导致所有DLL在程序启动时就被预加载到内存中,即使某些功能并未立即使用。
资源解压开销:Enigma Virtual Box 在运行时可能需要解压缩或映射这些嵌入的DLL到内存中,这个过程本身会消耗额外的内存资源,并可能导致内存碎片,从而增加了总体的内存占用。
虚拟化层开销:为了实现文件系统的虚拟化,Enigma Virtual Box 可能在运行时创建了一个虚拟环境来管理这些嵌入的资源,这也会引入一定的内存开销。
数据结构和缓存:打包工具可能为了快速访问这些嵌入的资源,建立了一些额外的数据结构或缓存,这也占用了额外的内存空间。
解决办法可能包括:
如果内存占用问题对您的应用性能有重大影响,建议进行上述尝试并对比测试结果,以找到最合适的解决方案。