WeakReference によってのみ保持されていると思われるオブジェクトがあります。私は SOS と SOSEX を使用してその参照所有者を追跡しましたが、どちらもこれが事実であることを確認しました (私は SOS の専門家ではないため、この点で間違っている可能性があります)。
WeakReferences の標準的な説明は、GC がスイープを行うときにそれらを無視するというものです。それにもかかわらず、私のオブジェクトは GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced) の呼び出しに耐えます。
WeakReference でのみ参照されるオブジェクトがそのコレクションを生き残ることは可能ですか? 私が強制できるさらに完全なコレクションはありますか? それとも、オブジェクトへの唯一の参照が弱いという私の信念を再検討する必要がありますか?
更新と結論
根本的な原因は、オブジェクトをロックしている参照がスタックにあったことです。なぜ SOS も SOSEX もその参照を示さなかったのかは不明です。ユーザーエラーは常に可能性があります。
根本原因を診断する過程で、私はいくつかの実験を行い、第 2 世代オブジェクトへの WeakReferences が驚くほど長い間存続できることを実証しました。ただし、WRd 第 2 世代オブジェクトはGC.Collect(GC.MaxGeneration, GCCollectionMode.Forced) では存続しません。