使用WpfHWndSource时连续内存泄漏

时间:2010-06-02 18:37:58

标签: wpf

我必须在从ocx控件调用的MFC对话框中加载WPF用户控件。为此,我创建了一个MFC Regular Dll(启用了clr选项的混合模式常规dll),我在其中创建了一个Dialog,它使用HWndSource托管wpf用户控件。此导出的对话框被放置为从ocx调用的MFC对话框上方的子对话框。 Ny中间对话框使用C ++ / Cli代码。

当关闭主MFC对话框时,我正在删除在堆上创建的中间对话框的ptr引用。但是在我看到连续的内存泄漏或增长之后。 在对话框的析构函数中,我在HWndSource和wpf用户控件上调用delete,以便调用它的dispose。

但是我看到之后连续泄漏了。

这方面的任何帮助都会有所帮助。

1 个答案:

答案 0 :(得分:0)

在谷歌中可以看到一些问题,使用HWndSource时连续泄漏4kb。我的问题似乎与此类似。

WPF Memory Leak on XP (CMilChannel, HWND)

我在MFC Dilaog示例应用程序中模拟了此问题,该应用程序与我的实际开发应用程序类似。在应用程序的构造函数中,我首先创建了一个虚拟的HWndSource对象,它似乎显示了内存泄漏的改进。

我在我的clr启用的中间mfc常规dll中添加了另一个导出函数,它创建了HWndSource。我从应用程序的构造函数中调用此导出函数。

void CConnectionPanelExport::CreateHwndSource()
{
    HWND hwnd = (HWND)(gcnew  System::Windows::Interop::HwndSource(*gcnew  
      System::Windows::Interop::HwndSourceParameters("MyApplication")))->Handle.ToPointer();
    CWnd *temp= CWnd::FromHandle(hwnd);
    temp->ShowWindow(SW_HIDE);
}

从我的应用程序的构造函数中,我调用了

CConnectionPanelExport connectionPanelExport;
connectionPanelExport.CreateHwndSource();

这似乎可以控制应用程序的内存,但实际上我无法理解这个问题。

我已经尝试在我的实际开发应用程序中实现它,并且当我调用/ clr enabled dll的导出方法时,我看到应用程序正在关闭。我正在启用非clr的主应用程序中启用clr的dll的静态链接