WPF ElementHost 内存泄露问题
无意中发现,WPF ElementHost 控件如果未正确释放,会存在内存泄露问题。解决方法如下:
xaml代码:
<Grid x:Name="grid">
<WindowsFormsHost x:Name="host">
<ElementHost x:Name="elementHost">
<local:MultiPlayerController x:Name="multiPlayer"></local:MultiPlayerController>
</ElementHost>
</WindowsFormsHost>
</Grid>
后台资源释放代码:
public void Dispose()
{
multiPlayer.StopAll();
if (elementHost != null)
{
FrameworkElement frameworkElement = elementHost.Child as FrameworkElement;
if (frameworkElement != null)
{
// Memory leak workaround: elementHost.Child.SizeChanged -= elementHost.childFrameworkElement_SizeChanged;
SizeChangedEventHandler handler = (SizeChangedEventHandler)Delegate.CreateDelegate(typeof(SizeChangedEventHandler), elementHost, "childFrameworkElement_SizeChanged");
frameworkElement.SizeChanged -= handler;
}
elementHost.Child = null;
elementHost.Dispose();
elementHost = null;
}
if (host != null)
{
host.Child = null;
host.Dispose();
host = null;
}
grid.Children.Clear();
}
关键代码:
SizeChangedEventHandler handler = (SizeChangedEventHandler)Delegate.CreateDelegate(typeof(SizeChangedEventHandler), elementHost, "childFrameworkElement_SizeChanged");
frameworkElement.SizeChanged -= handler;
另外 grid.Children.Clear() 也不能省。
参考资料:https://stackoverflow.com/questions/24823103/how-to-clear-memoryleak-from-elementhost-control
WPF ElementHost 内存泄露问题的更多相关文章
- WPF不明内存泄露已解决,白头发也没了
原文:WPF不明内存泄露已解决,白头发也没了 在使用OpenExpressApp进行WPF应用开发过程中遇到多个内存泄漏的地方,在上一篇中求助了一个内存泄露问题[WPF不明内存泄露原因,头发都白了几根 ...
- WPF常见内存泄露
Event handlers leak This type of leak occurs when subscribing an object (let's call it listener) to ...
- PF不明内存泄露已解决,白头发也没了(转)
在使用OpenExpressApp进行WPF应用开发过程中遇到多个内存泄漏的地方,在上一篇中求助了一个内存泄露问题[WPF不明内存泄露原因,头发都白了几根],本篇与大家分享一下如何解决此问题的过程. ...
- WPF的TextBox产生内存泄露的情况
前段时间参与了一个WPF编写的项目,在该项目中有这样一个场景:在程序运行过程中需要动态地产生大量文本信息,并追加WPF界面上的一个TextBox的Text中进行显示.编写完之后,运行该项目的程序,发现 ...
- WPF WPF中解决内存泄露的几点提示与解决方法
http://www.cnblogs.com/LastPropose/archive/2011/08/01/2124359.html 一直以来用WPF做一个项目,但是开发中途发现内存开销太大,用ANT ...
- 基于HTML5的WebGL应用内存泄露分析
上篇(http://www.hightopo.com/blog/194.html)我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动, ...
- JavaScript垃圾回收(三)——内存泄露
一.JavaScript内存监测工具 在讨论内存泄露之前,先介绍几款JavaScript内存监测工具. IE的sIEve与JSLeaksDetector(这两个可以在下面的附件中下载),firefox ...
- Net Memory Profiler 分析.Net程序内存泄露
Net Memory Profiler 分析.Net程序内存泄露 Haozes's Tech Space 人類的全部才能無非是時間和耐心的混合物 使用.Net Memory Profiler 分析.N ...
- 可能会导致.NET内存泄露的8种行为
原文连接:https://michaelscodingspot.com/ways-to-cause-memory-leaks-in-dotnet/作者 Michael Shpilt.授权翻译,转载请保 ...
- dotnet 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露
本文记录我将应用迁移到 dotnet 6 之后,在 Win7 系统上,因为使用 HttpWebRequest 访问一个本地服务,此本地服务开启 https 且证书链在此 Win7 系统上错误,导致应用 ...
随机推荐
- [编程]UML语言:理论之光与实践之惑
UML介绍及现状 UML(统一建模语言)是软件工程领域中具有悠久历史的一种模型化语言工具.它通过标准化的图形符号体系,使得软件系统的蓝图能够被更直观地表达出来.UML诞生于20世纪90年代,经过多年积 ...
- Jenkins中HTML报告无法正常显示问题解决
自动化结果生成了HTML报告,但是在Jenkins中打开报告却显示空白,打开控制台,可以看到该报错 参考https://www.jenkins.io/doc/book/security/configu ...
- Codeforces Round 905 (Div. 3)
Codeforces Round 905 (Div. 3) A. Morning 题意:操作:显示,向前走都为一次操作:目标:显示这四个数 思路:0->10,然后依次作差就行 #include ...
- [ABC309G] Ban Permutation
Problem Statement Find the number, modulo $998244353$, of permutations $P=(P_1,P_2,\dots,P_N)$ of $( ...
- Hive SQL之表与建表
数据类型: 建表 create database itheima; --1.创建一张表 -- 表名 --字段 名称 类型 顺序 --字段之间的分隔符 create table itheima.t_a ...
- 一文读懂遗传算法(附python)
几天前,我着手解决一个实际问题--大型超市销售问题.在使用了几个简单模型做了一些特征工程之后,我在排行榜上名列第 219 名. 虽然结果不错,但是我还是想做得更好.于是,我开始研究可以提高分数的优化方 ...
- 【源码系列#04】Vue3侦听器原理(Watch)
专栏分享:vue2源码专栏,vue3源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位ITer关注点赞收藏 语法 侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数 ...
- MOSS对话式大型语言模型
MOSS是复旦大学自然语言处理实验室发布的一种类似于ChatGPT的会话语言模型.MOSS能够按照用户的指示执行各种自然语言任务,包括回答问题.生成文本.摘要文本.生成代码等.MOSS还能够挑战错误的 ...
- Pytest07-pytest.ini配置文件
1.pytest配置文件 固定名称:pytest.ini 作用域:当前目录及子目录 具体配置功能见下: [pytest] # 01 把命令行参数自动添加到这里 addopts = -s -v --ht ...
- Pikachu漏洞靶场 ../../(目录遍历)
目录遍历 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活.当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行 ...