gpt4 book ai didi

c# - 内存泄漏与 ContextMenuStrip

转载 作者:太空狗 更新时间:2023-10-29 17:54:19 27 4
gpt4 key购买 nike

我正在创建大量自定义控件并将它们添加到 FlowLayoutPanel。还有一个在设计时创建和填充的 ContextMenuStrip。

每次将控件添加到面板时,都会将其 ContextMenuStrip 属性分配给此菜单,以便所有控件“共享”相同的菜单。但是我注意到当控件从面板上移除并处理掉时,任务管理器中使用的内存并没有减少。每次创建控件并将其添加到布局面板时,它都会增加大约 50kB。

我下载了 .NET Memory Profiler 的试用版,它显示在处理控件后,有对菜单条的引用。在处理控件之前,我更改了代码以将 ContextMenuStrip 属性显式设置为 null,是的,现在释放了内存。为什么是这样? GC 不应该清理这种类型的东西吗?

最佳答案

如果查看 Control 的 ContexmenuStrip 属性,您会发现 setter 将控件订阅到 MenuStrip 的 Disposed 事件,从而创建从 MenuStrip 到 Control 的反向引用。

这意味着它是 reachable-through-event 的典型案例,您已经找到了解决方案:将 ContexmenuStrip 属性设置为 null。

关于c# - 内存泄漏与 ContextMenuStrip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792427/

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