我试图调试.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
答案 0 :(得分:0)
此链接可能仍然相关:Thread handle leak。您是否尝试在GC.WaitForPendingFinalizers()
之后致电GC.Collect()
?
答案 1 :(得分:0)
我发现了错误:)我从执行路径中删除了一个和一个模块,并找到了“坏”模块。它是一个通信模块,它是经典的“添加对象列表,但没有删除”bug :)线程句柄++无法进行GC,因为列表持有对象的引用..感谢回复