我有一个 WinForms .Net 应用程序,它运行大量 XPS 文档(数千个),在此运行期间,每个文档的句柄数量(根据 sysinternals 进程监视器和任务管理器)增加 3-10 个。我严重怀疑这些句柄是由 MS .Net XPS 框架库打开而不是关闭的,但我无法追踪它。
尽管单步执行代码,但在同一运行期间,句柄计数在不同点会增加。例如,通过循环一次,句柄计数将在一行上跳1,而下一次可能不会,或者可能跳2。所以我怀疑XPS com组件存在句柄泄漏。
虽然内存使用情况很好,但如果我继续像这样耗尽句柄,那么我将使应用程序崩溃,甚至桌面崩溃。
到目前为止,我已尝试使用 sysinternals 进程资源管理器来查看句柄,但它们都被标记为没有更多详细信息。还使用了 sysinternals 中的handle.exe,这在快照之前、期间和之后没有显示出任何显着差异。
关于如何追踪 handle 的去向有任何线索吗?我想我必须简化为单线程控制台应用程序来测试。
问候
瑞恩
最佳答案
虽然单独使用有点贵,但我们使用 ANTS Profiler这对于发现此类问题非常有帮助。您可以下载并尝试试用版。
可能还有其他好的分析器,但这是我熟悉的一个。
关于.net - 如何找到我的 .Net 应用程序在何处泄漏 Windows 句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/231480/