当社の製品は、ソケット ハンドル、メモリ、スレッドなど、多くの Windows リソースを消費します。通常、アクティブなスレッドは 700 ~ 900 ありますが、場合によっては、製品が新しいスレッドを迅速に作成して何らかの作業を行い、それを閉じることができます。弊社製品のクラッシュ メモリ ダンプを見つけました。~* windbg コマンドを使用すると、817 個のアクティブなスレッドを確認できますが、!handle コマンドを実行すると、次の要約が出力されます。
タイプ数 なし 15 イベント 2603 セクション13 ファイル705 ディレクトリ 4 ミュータント 32 ウィンドウステーション 2 セマフォ 789 キー 208 工程1 スレッド 5766 デスクトップ 1 IoCompletion 308 タイマー 276 KeyedEvent 1 TpWorkerFactory 48
したがって、実際にはプロセスは 5766 スレッドを保持します。それで、私の質問は、Windowsが実際にプロセスのハンドルを解放するのはいつですか? 何らかの遅延やキャッシングは可能ですか?誰かがこの動作を説明できますか? ハンドル リークがあるとは思いませんが、システムのレガシー部分で、小さなタスクのスレッドをすばやく作成して閉じるという奇妙な動作があります。また、1000 を超えるスレッドを同時に実行する可能性は低いことを指摘したいと思います。これについてはかなり確信があります。ありがとう。