我有一个内存分析器并跟踪一个应用程序。在那个应用程序中,当我多次连续打开表格时(6),应用程序变得不稳定并且可能会关闭。
怀疑是内存泄漏。所以,我跟踪以下根路径
如何阅读此图以修复内存泄漏?
我有一个内存分析器并跟踪一个应用程序。在那个应用程序中,当我多次连续打开表格时(6),应用程序变得不稳定并且可能会关闭。
怀疑是内存泄漏。所以,我跟踪以下根路径
如何阅读此图以修复内存泄漏?
我在堆栈顶部看到很多事件处理程序。
内存泄漏的一个常见原因是实例直接由 EventHandler 根植。您的“泄漏”实例可能仅用作 EventHandler 的目标,并且没有其他方法可以到达它。它们甚至可能已经被处理掉了。
我建议使用.NET MemoryProfiler的(线索) 。它可以捕获快照并自动指出一些常见问题,例如事件处理程序使实例保持活动状态。
根在顶部,您的控件/类在底部。通常,您会朝任一方向阅读,试图找出路径中的问题。如前所述,EventHandlers 是一个非常常见的问题。尤其是在静态环境中。意思是,某些类通过 += 挂钩到一个事件上,并且永远不会再次取消挂钩。只要两个组件,类和提供一个的事件,都是非静态的并且没有保存在其他任何地方,这没有问题。
在您的示例中, UserPreferenceChanged 事件似乎是问题所在,我猜这是一个静态事件。因此,UltraToolbarsManager(它似乎也是静态的)连接了该事件。似乎 UltraToolbarsManager 还处理工具栏图标的所有单击事件。所以,问题是,您的类与 ToolClick 事件挂钩。
可能的解决方案是