提问人:Atlas Liu 提问时间:11/13/2023 更新时间:11/13/2023 访问量:23
C# ContextMenuScript 导致 .Net Framework 中的 GCHandle 泄漏和内存泄漏
C# ContextMenuScript cause GCHandle leak and Memory Leak in .Net Framework
问:
我在 .net framework 4.8 中开发了一个应用程序,它可以通过命令一次又一次地显示、切换和关闭不同的 .net 显示器,显示器内部有许多控件,我无法将它们保存在内存中,因为它太多了(取决于用户要求,许多> 5,000 个显示器,1000,000 个 .net 控件),所以我必须使用“new”和“Dispose”。切换一段时间后,我们发现内存泄漏,尤其是性能监视器中的 GCHandle 泄漏。
用WinDBG调试,发现System.WeakReference是泄漏的,长时间停止切换,然后在WinDBG中打印WeakReference的句柄值,都是null。 注意:我已经调用了 dispose,比如 b.ContextMenuScript = c; 我已经打过电话了:
b.ContextMenuScript = null;
... // clear all event bind what I binded, clear all children in menu
c.Parent = null;
c.Dispose();
c = null;
我现在能做些什么来修复此异常? 或者 Microsoft 是否提供了一些文档来描述它,做某事,或者它是未知的问题?
我已经从父级远程了 ContextMenuScript,并调用了它的 Dispose 方法,它仍然泄漏。我知道它可能保存在系统中的静态对象中,但是如何删除它,以及如何减少 GCHandle?
答: 暂无答案
评论