私はC#を使用していますが、おそらくVB.NETでも同じです。私はオブジェクトのデストラクタにブレークポイントを設定して、いつ/削除されたかを知ることができます。 winformsでは基本クラスがSupressFinalizeを呼び出し、フォームデストラクタが呼び出されないようになっているので、私はそうすることはできないと思います。 オブジェクトがガベージコレクションされたかどうかを知る別の方法がありますか?キャッチ22のように思えるかもしれません。もしあなたが参照する必要があるのであれば、参照する必要がありますが、その参照を保持することによって収集されたガベージはそれを押しつぶさないからです。winformフォームがガベージコレクションされているかどうかを知る方法?
この「What strategies and tools are useful for finding memory leaks in .NET?」を読んだことがあります。この「大きな写真」を扱うためのツールやフレームワークがあることを理解しており、数週間後にこれらの方法のいくつかを試しています。今のところ、削除されていないフォームに関連したリークがあるかもしれないという本当に強い気持ちがあるので、この1つのことをチェックしたいだけです(そして私は知るために知りたい)。
私はDisposeを見ることができると知っていますが、Disposeを呼び出すことはできますが、依然としてフォームオブジェクトがまだ存在しています。その理論をテストするために、自分のフォームにコールバックイベント用に登録した既知の問題を作成し、フォームを登録解除せずにフォームを閉じました。確かに、Disposeが呼び出された(そして「処分する」は真実だった)が、イベントが解雇されたときに、それはすでに処分されていたフォームの中で私のブレークポイントに達した。
あなたの元の質問については、あなたがその寿命に影響を与えずに、オブジェクトの存在を監視するために、弱い参照を使用することができます。
イベントハンドラを実行するイベントを処理したフォームで実行できる場合は、間違いなくバグがあります。そして、おそらくフォームオブジェクトをリークするものです。 –