アンマネージ リソースに対して SafeHandle を内部的に使用するサード パーティ ライブラリがあります。一部のエラーの場合、オブジェクトを破棄して再作成する必要があります。ただし、dispose の実装にはバグがあり、これらのケースのサブセットでハンドルを閉じることができません。これにより、ファイナライザーが実行されるまで、新しいオブジェクトが正常に作成されなくなります。
サードパーティのコードが修正されるまで、これに対処するために 2 つの解決策 (どちらも悪) が提案されています。
a を実行し
GC.Collect
てファイナライザーを実行し、オブジェクトをクリーンアップしますリフレクションを使用してハンドルを取得し、破棄に失敗した場合はハンドルを閉じます
これらのうち、悪意が少ないのはどれですか?その理由は? これらのいずれかよりも害が少ないと考えられていない他の方法はありますか?