4

我的 WPF 应用程序以大约 4kb/s 的速度泄漏内存。任务管理器中的内存使用量不断攀升,直到应用程序因“内存不足”异常而崩溃。

通过我自己的研究,我发现这里讨论了这个问题:Track down memory leak in WPF and #8 here: http://blogs.msdn.com/jgoldb/archive/2008/02/04/finding-memory-泄漏-在-wpf-based-applications.aspx

所描述的问题是: 这是 WPF 中存在的漏洞,存在于 .NET 3.5 SP1 之前的框架版本中。这是因为 WPF 选择使用哪个 HWND 将消息从呈现线程发送到 UI 线程的方式。此示例销毁创建的第一个 HWND 并在新窗口中启动动画。这会导致从渲染线程发送的消息堆积而不被处理,从而有效地泄漏内存。

提供的解决方案是: 解决方法是首先在您的 App 类构造函数中创建一个新的 HwndSource。这必须在 WPF 创建任何其他 HWND 之前创建。只需创建这个 HwndSource,WPF 就会使用它来将消息从渲染线程发送到 UI 线程。这确保了所有消息都将被处理,并且不会泄漏。

但我不明白解决方案! 我有一个正在使用的 Application 子类,我尝试在该构造函数中创建一个窗口,但这并没有解决问题。

按照字面上给出的说明,看起来我只需要将其添加到我的 Application 构造函数中:

new HwndSource(new HwndSourceParameters("MyApplication"));
4

1 回答 1

6

修复:

应用程序.xaml.cs

class MyApp1 : Application
{
   // ...

   public Application()
   {
       new HwndSource(new HwndSourceParameters());
   }
   // ...
}
于 2009-11-18T09:59:57.097 回答