使用MemProfiler和ANTS Memory Profile,我了解到根执行路径如下:
FormOpenWatch <-- The item which remains active System.EventHandler -- (this as Delegate)._target System.Object[] System.EventHandler -- (this as MultiCastDelegate)._invocationList System.ComponentModel.EventHandlerList+ListEntry -- handler System.ComponentModel.EventHandlerList+ListEntry -- next System.ComponentModel.EventHandlerList+ListEntry -- next System.ComponentModel.EventHandlerList+ListEntry -- next System.ComponentModel.EventHandlerList+ListEntry -- next System.ComponentModel.EventHandlerList -- head PTU.MdiPTU -- (this as Component).events <-- The base application
任何人都对我可能想要的东西有任何见解?我发现在基本应用程序中添加了一个Shown事件,并确保在处理表单时将其删除,但这似乎没有解决问题.
非常感谢您提供的任何帮助.
后来编辑:我以为我已经好几次成功解决了这个问题,而且我还有问题.问题似乎源于我的Plotter类(和各种派生类)具有这个“公共静态事件MouseEventHandler MultiCursorMouseMove;”事件.我们有一个“光标”,显示图形在鼠标位置的值和时间.最初,这一次在一个图表上工作,但是请求允许用户切换一种模式,其中移动鼠标将图表移动到所有显示的图形上.当项目被实例化时,我写了一个初始处理事件钩住了EventHandlers,并且我在池塘中的伙伴重写了它以使用静态事件,该事件被分配给构造中的每个项目.他的方式更优雅,更好.除了导致内存泄漏之外的所有内容.使用内存分析软件已经表明,每次我试图摆脱持有图的表格时,我都会留下一些“带有直接EventHandler根的disposed实例”.在每一个中,它表明该对象是绘图仪或绘图仪指向的对象.并且,在每个中,基本链接是MultiCursorMouseMove EventList指向这些对象.我认为正在发生的事情是绘图仪仍然活着,因为它有这个静态事件,而这个事件又与绘图仪有关.我已经设法通过我的dispose代码删除每个绘图仪的事件来验证MultiCursorMouseMove在给定点通过调试器是空的,但是在同一点运行探查器仍然显示从MultiCursorMouseMove到这些类的链.
我目前没有关于如何解决这个问题的想法.任何人?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。