gpt4 book ai didi

.net - 如何查找用户对象中的泄漏

转载 作者:行者123 更新时间:2023-12-04 12:56:09 25 4
gpt4 key购买 nike

我们的 .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 必须解决的错误。

使用 SyncFusion 菜单的任何人都有类似的泄漏吗?
Ants 告诉我一些 PopupMenu 对象仍然存在,但 Ants 没有提供有关如何找到创建对象的位置(从而确定在哪里处理它们)的信息。

上面引用的 SO 帖子中提到的 leakTrap/detours 看起来很有趣,因为它似乎捕获了对 USER 对象分配的特定调用。

欢迎提出建议

最佳答案

如果您知道菜单到处都是,那么您应该能够为您的进程枚举 GDI 对象并使用 来增强它们。删除菜单 ()。

当弹出菜单被显示和关闭时,windows 应该通知你的父窗口,这样这将是拍摄 GDI 菜单句柄快照并删除更新的一个完美的地方。

它相当蛮力,不推荐用于 .net,在那里进行这种低级 GDI 操作可能很顽皮

我会用 SyncFusion 菜单制作一个简单的测试应用程序来证明这一点,如果问题仍然存在,请联系供应商

关于.net - 如何查找用户对象中的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231066/

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