【发布时间】:2011-09-08 00:47:24
【问题描述】:
我们的 .Net 4.0 应用程序存在泄漏,导致它在长时间使用后崩溃。经过调查,我确定“用户对象”正在泄漏。 User 对象是一个 Windows 资源,如下所述:
http://msdn.microsoft.com/en-us/library/ms725486%28v=VS.85%29.aspx
Windows 为每个进程分配 10,000 个用户对象。其他 Windows 资源(例如 GDI 对象和句柄)在应用程序运行时是不变的。
我发现了一个关于 C++ 的类似问题,解决方案需要从 microsoft reseach 下载一个名为“detours”的包 - 问题是什么? 1 万美元。
使用 Ant 内存分析器,我怀疑它与菜单有关。我们使用的是来自 SyncFusion 的菜单,因此通过查看代码无法找到与菜单相关的东西的生命周期。所以这可能是 SynFusion 必须解决的一个 bug。
任何人在使用 SyncFusion 菜单时遇到过类似的泄漏? Ants 告诉我一些 PopupMenu 对象仍然存在,但 Ants 没有提供有关如何查找对象创建位置的信息(从而确定在何处处置它们)。
上面引用的 SO 帖子中提到的泄漏陷阱/detours 看起来很有趣,因为它似乎捕获了对 USER 对象分配的特定调用。
欢迎提出建议
【问题讨论】:
-
我将开始查看您自己在代码中创建的菜单。也许在
onchange事件中创建右键菜单或类似的东西覆盖您的另一个菜单。我过去曾与 syncfusion Edit 发生过泄漏,在解决这些问题时,似乎对正确处理非常严格。
标签: .net memory-leaks user-object