継承された C# winforms コードで、ハンドルのリークの問題 (「このコマンドを処理するのに十分な割り当てがありません。」) があったため、Sysinternals のハンドルツールを使用して追跡しました。リークしていたのはイベント ハンドルであることが判明したので、Google で検索してみました ( 「もしかして: イベントハンドラー?」を返さないクエリを数回検索しました)。Junfeng Zhang 氏によると、イベント ハンドルは Monitor を使用して生成され、イベント ハンドルの破棄と同期プリミティブに関する奇妙なルールが存在する可能性があります。
このコードはHIDインターフェイスと多くのwin32マーシャリングと相互運用も扱っており、何もしていないため、ハンドルのリークの原因が完全に多くの同期を呼び出す長寿命のオブジェクトに完全に起因するかどうかは完全にはわかりません。気づいた同期。いずれにせよ、これを windbg で実行して、ハンドルの発生元を追跡し始め、コードのこのセクションの学習にも多くの時間を費やしますが、どのイベントに関する情報を見つけるのに非常に苦労しましたハンドルは最初の場所にあります。
イベント カーネル オブジェクトのmsdn ページは、一般的な同期の概要にリンクしているだけです...では、イベント ハンドルとは何ですか?また、それらはミューテックス/セマフォ/その他とどう違うのでしょうか?