メモリがリークするようなWindowsフォームアプリケーションがあるので、RedgateのANTSメモリプロファイラを使用して、疑わしいオブジェクトを見て、すでにファイナライザキューにあるオブジェクトのみが保持していることがわかります。 Finalizer Queueとは何ですか?あなたは私を最高の定義に向けることができますか?あなたは一言のアドバイスを分かち合うことができますか?ファイナライザキューとControl + ThreadMethodEntryとは何ですか?
また、ファイナライザキューのすべてのルートGCオブジェクトは、System.Windows.Forms.Control + ThreadMethodEntryという名前の "caller"という名前のオブジェクトです。私はそれがマルチスレッドのUIのやりとりに関係しているのを見ていますが、それ以上のことは分かりません。私の見た目の怠惰を許し、無知を認めましたが、これらのリソースはすべてベンダーのコンポーネント内に埋められています。私はこれらの問題についてベンダーに話していますが、私は会話をスピードアップするための指示が必要です。 ThreadMethodEntryのもっとも有用な定義を教えてください。一言一言?
また、ファイナライザキューのこれらのオブジェクトについても気にする必要がありますか?
更新:この3210は役に立ちました。
偉大な答えPaulに感謝します。それは、私が話しているオブジェクトリファレンスグラフです。リソースをクリーンアップした後、2番目のスナップショットの新しいオブジェクトを見ています。 IDisposableを実装するグラフのすべてのオブジェクトには、「このオブジェクトに対してDispose()が呼び出されました」というツールヒントがありますが、選択されたオブジェクトにはそのようなツールチップがありません。 – flipdoubt
ThreadMethodEntryについての注意:私はそれらがUIスレッドのInvokeで使われていると思います。すべてのControlオブジェクトには、ThreadMethodEntry型のスレッドコールバックのキューがあります。コールバックはThreadMethodEntryをデキューして実行します。 各ThreadMethodEntryオブジェクトには、一連の内部フィールドがあります。これらのフィールドを調べると、これらのベンダーのオブジェクトのどれが呼び出されているか把握するのに役立ちます。あなたがANTSからその情報を得ることができるかどうかは思い出せませんが、WinDbg.dllとsos.dll(管理されたデバッガの拡張機能)を使用することができます。 "メソッド"デリゲートと "呼び出し元"コントロールを見てください。 –
また、ThreadMethodEntryオブジェクトにはファイナライザが実装されていますが、Disposeメソッドはありません。完了すると、ファイナライザキューに移動します。 –