You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.8中ContextMenuScript引发GCHandle及内存泄漏求助

问题:.NET Framework 4.8 大量控件界面切换时的GCHandle/WeakReference内存泄漏

基于.NET Framework 4.8开发了一款应用,核心功能是通过命令反复显示、切换及关闭带有大量控件的不同.NET显示界面。由于界面数量最多可达5000个、控件总量能到100万个,无法将所有界面常驻内存,只能频繁通过new创建实例,用完后调用Dispose释放。

但反复切换操作后,通过性能监视器观察到明显的内存泄漏问题,其中GCHandle泄漏尤为突出。经WinDBG调试进一步定位,发现System.WeakReference出现泄漏,且停止切换操作较长时间后,WinDBG中打印的WeakReference句柄值均为null。

目前已执行以下释放操作:

b.ContextMenuScript = null;
... // 清除所有自行绑定的事件,清除菜单中所有子项
c.Parent = null;
c.Dispose();
c = null;

已经将ContextMenuScript从父控件移除并调用其Dispose方法,但泄漏问题依然存在。推测这些WeakReference可能被系统静态对象持有,现在需要解决:

  • 如何移除这类被系统静态对象持有的引用,减少GCHandle数量?
  • 微软是否有相关文档说明此类问题?

内容的提问来源于stack exchange,提问作者Atlas Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:43:10