gpt4 book ai didi

XP 上的 WPF 内存泄漏(CMilChannel、HWND)

转载 作者:行者123 更新时间:2023-12-05 00:42:54 26 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

修复:

应用程序.xaml.cs

class MyApp1 : Application
{
// ...

public Application()
{
new HwndSource(new HwndSourceParameters());
}
// ...
}

关于XP 上的 WPF 内存泄漏(CMilChannel、HWND),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com