.Net服务中的线程句柄泄漏(不是win32线程。即在任务管理器中不可观察)

时间:2012-04-17 07:40:42

标签: c# .net debugging

我试图调试.Net服务中的句柄泄漏,我对Thread Handle泄漏感到困惑。 有人可以描述一下这是怎么发生的吗?任务管理器在每个测试周期后仅报告22个活动线程,但句柄计数不断增加。

在每个测试期后,在获取句柄计数之前,我发送一条消息强制GC。

当然还有一个事件句柄泄漏,但这更容易解释/修复。

D:\log\SEEService>handle -p 82080 -s

Handle v3.46
Copyright (C) 1997-2011 Mark Russinovich
Sysinternals - www.sysinternals.com

Handle type summary:
  ALPC Port       : 8
  Desktop         : 1
  Directory       : 3
  EtwRegistration : 35
  Event           : 97397
  File            : 36
  IoCompletion    : 3
  Key             : 38
  KeyedEvent      : 1
  Mutant          : 9
  Section         : 23
  Semaphore       : 15
  Thread          : 22845
  Timer           : 5
  Token           : 1
  TpWorkerFactory : 4
  WindowStation   : 2
Total handles: 120426

2 个答案:

答案 0 :(得分:0)

此链接可能仍然相关:Thread handle leak。您是否尝试在GC.WaitForPendingFinalizers()之后致电GC.Collect()

答案 1 :(得分:0)

我发现了错误:)我从执行路径中删除了一个和一个模块,并找到了“坏”模块。它是一个通信模块,它是经典的“添加对象列表,但没有删除”bug :)线程句柄++无法进行GC,因为列表持有对象的引用..感谢回复