如何找到我的.Net应用程序泄漏Windows句柄的位置?

我有一个运行在大量XPS文档(数千个)上的WinForms .Net应用程序,在此运行期间,每个文档的句柄数量(根据sysinternals进程监视器和任务管理器)增加了3-10个.我非常怀疑这些是MS .Net XPS框架库打开但未关闭的句柄,但我无法追踪它.

尽管单步执行代码,但在同一运行期间,句柄计数会在不同点上增加.例如,一个遍历循环,句柄计数将在一行上跳过1,下次可能不会,或者它可能会跳过2.所以我怀疑XPS com组件有句柄泄漏.

内存使用虽然很好,但是如果我继续用尽这样的句柄,那么我会崩溃应用程序,也许是桌面.

到目前为止,我已经尝试使用sysinternals进程资源管理器来查看句柄,但它们都被标记为没有更多细节.还使用了来自sysinternals的handle.exe,这并未显示快照之前,期间和之后的任何显着差异.

关于如何追踪手柄走向的任何线索?我想我将不得不简化为单线程控制台应用程序进行测试.

问候

瑞安

最佳答案 虽然单数使用有点贵,但我们使用
ANTS Profiler,这对于找到这样的问题非常有帮助.您可以下载并试用试用版.

可能还有其他好的剖析器,但这是我熟悉的.

点赞