如何在c#应用程序中检测把手泄漏

如何在c#应用程序中检测把手泄漏,c#,.net,handle,handle-leak,C#,.net,Handle,Handle Leak,在我的C#应用程序中,当它运行时,我可以在windows任务管理器中清楚地看到 句柄列的数量稳步增加。 内存很好,没有增加,只有手柄达到很高的水平 如何调试此泄漏、检测它并解决句柄泄漏 谢谢 我怀疑这是您要调试的东西;这是您将在代码检查中发现的东西。可能的原因: 未能处置GDI对象。你在使用WinForms吗?您是否在每支画笔上都有使用语句 你的线程数和句柄数一起增加了吗?您正在启动从未完成的线程吗 您正在使用LogonUser吗?闭把手?您必须非常小心地处理用户句柄。如果将登录句柄传递给Win

在我的C#应用程序中,当它运行时,我可以在windows任务管理器中清楚地看到 句柄列的数量稳步增加。 内存很好,没有增加,只有手柄达到很高的水平

如何调试此泄漏、检测它并解决句柄泄漏


谢谢

我怀疑这是您要调试的东西;这是您将在代码检查中发现的东西。可能的原因:

  • 未能处置GDI对象。你在使用WinForms吗?您是否在每支画笔上都有
    使用
    语句

  • 你的线程数和句柄数一起增加了吗?您正在启动从未完成的线程吗

  • 您正在使用LogonUser吗?闭把手?您必须非常小心地处理用户句柄。如果将登录句柄传递给WindowsIdentity,则应在将其传递给WindowsIdentity后立即处置该句柄(在创建该句柄的同一线程上)

  • 您正在使用SqlConnection吗?它的游泳池保持开放式手柄。也许有什么不对劲


  • 很久以前,我有一个问题,我是处理一个登录用户处理晚。事实上,用户已断开连接,手柄已自动关闭。此后,我会打电话给CloseHandle,询问我认为是什么手柄。但是,.NET中的句柄插槽可以重用。它们几乎总是有效的,但您无法判断给定插槽中的对象类型。我实际上是无意中关闭了SqlConnection池对象。

    有第三方UI控件吗?你能再解释一下应用程序结构吗?这里没有足够的信息,没有第三方UI控件。我认为这与用户界面无关,漏洞来自逻辑。这个应用程序非常大和复杂,这有点难以解释她的结构。可能是重复的