在WinUI 3应用中使用MFC常规DLL时出现内存泄漏问题
WinUI 3 结合MFC常规DLL的内存泄漏问题
在WinUI 3应用中使用MFC常规DLL时出现内存泄漏,仅当通过window.content()或Frame.Navigate()方法设置页面内容时才会触发泄漏;若仅激活窗口但不设置页面内容,则不会产生泄漏,但业务需求需要同时显示页面内容和使用MFC DLL。
已在示例项目中复现该问题,测试环境如下:
- Microsoft Visual Studio Professional 2019(版本16.11.8)
- Debug x86编译模式
- Windows 10 20H2(Build 19042)
泄漏表现:关闭应用后,输出面板会显示检测到内存泄漏。移除MainPage.xaml中的内容后,泄漏数量会减少一个,推测是Page未被销毁导致的泄漏。
MainPage.xaml代码如下:
<Page> <StackPanel> <Button>Click me</Button> </StackPanel> </Page>
测试场景:仅在WinUI项目中声明了一个来自MFC DLL的类CTestClass对象,该DLL通过.lib链接到WinUI项目。
复现步骤
- 下载存在泄漏的示例项目
- 解压后在指定VS环境的Debug x86模式下构建项目
- 以调试模式运行应用
- 关闭应用
- 查看输出标签页的内存泄漏提示
预期行为
应用关闭后不应检测到内存泄漏
项目依赖NuGet包
Microsoft.WindowsAppSDK.1.2.221116.1 Microsoft.Windows.SDK.BuildTools.10.0.22621.755 Microsoft.Windows.ImplementationLibrary.1.0.211019.2 Microsoft.Windows.CppWinRT.2.0.210806.1
内容的提问来源于stack exchange,提问作者Mavaji
相关产品推荐
相关产品推荐

