0

.Net サービスでハンドル リークをデバッグしようとしていますが、スレッド ハンドル リークに困惑しています。誰かがこれがどのように起こるか説明してもらえますか? タスク マネージャーは、各テスト期間後に 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
4

2 に答える 2

0

このリンクはまだ関連している可能性があります:スレッド ハンドル リークGC.WaitForPendingFinalizers()の後に電話をかけてみましたGC.Collect()か?

于 2012-04-17T08:05:00.457 に答える
0

私はバグを見つけました:)実行パスから1つと1つのモジュールを削除し、「悪い」モジュールを見つけました。それは通信モジュールであり、それは古典的な「リストにオブジェクトを追加したが、削除されていない」バグでした:)リストがオブジェクトへの参照を保持していたため、スレッドハンドル++をGCできませんでした..ありがとう返信

于 2012-04-18T07:23:32.400 に答える