0

我正在解决我们在 .NET WinForms 应用程序中遇到的一些内存问题。我正在使用SciTech 的 .NET Memory ProfilerdotTrace,它们似乎都在通过 .NET Framework 控件中的静态事件处理程序指示根分配。从 google'ing 周围,我在这里这里找到了这方面的报告,但这似乎是在 .NET Framework 的 v1.1 和承诺的 2.0 修复上报告的。我们在 2.0 上运行,我们仍然看到这些问题。我发现的前 25 个内存违规者都指向这些静态事件处理程序,特别是 SystemEvents.UserPreferenceChanged。 这家伙竭尽全力寻找一种方法来放松这些处理程序。我还没有尝试过,但我确实尝试了 Microsoft 支持票中提到的解决方法,但没有一个对我有用。

我很清楚事件处理程序(尤其是长期存在的静态处理程序)的泄漏潜力,但这几乎是我无法控制的。有人对此有经验吗?

4

2 回答 2

1

对于 CLR 中真正严重的内存泄漏问题,我发现最好的工具是 windbg。如果你能克服神秘的语法,它是一个非常有效的调试器和泄漏跟踪器。缺点是使用起来不是很直观,而且学习曲线非常陡峭。

学习windbg的最好方法是做。这里有几篇关于使用 windbg 追踪泄漏的文章。

于 2008-11-13T18:24:40.280 回答
0

我不知道 WinDBG 是否会在这里提供帮助。听起来这确实是框架中的一个错误。有没有办法可以发布一个简单的复制?如果是这样,那么我可以深入研究到底发生了什么,看看是否有解决方法。否则,您最好的选择是在Connect上开票。他们很擅长回到人身边。

如果您确实想使用 WinDBG 进行调查,您可以调查堆上发生的事情以了解发生了什么。开始查看周围挂着的对象是由什么根植的。我的猜测是,您将在上面的分析器中看到几乎所有内容。WinDBG 的棘手之处在于它可以告诉你任何你想要的东西——你必须知道你想要回答的问题。

于 2008-11-13T18:49:08.580 回答