念のため、バイト配列とこの固定配列に GCHandle を固定していることを前提とします。
GCHandle.Free() メソッドが呼び出されると、単にハンドルを解放し、元のバイト配列の管理を GC に引き渡すだけなので、その配列へのアクティブな参照がある場合、まだ破棄されません。 ?
念のため、バイト配列とこの固定配列に GCHandle を固定していることを前提とします。
GCHandle.Free() メソッドが呼び出されると、単にハンドルを解放し、元のバイト配列の管理を GC に引き渡すだけなので、その配列へのアクティブな参照がある場合、まだ破棄されません。 ?
あなたが正しいです。GCHandle
同じオブジェクトへの別のハンドルです。少なくとも 1 つある限り、オブジェクトは破棄されません。
GCHandle
ただし、タイプで割り当てることができますWeak
。これにより、GC がオブジェクトをGCHandle
指している唯一のオブジェクトである場合にオブジェクトを収集できます (「通常の」参照もある場合、悪いことは何も起こりません)。
はい。
ハンドルがスコープ外になったら、Free メソッドを呼び出して明示的に解放する必要があります。そうしないと、メモリ リークが発生する可能性があります。固定されたハンドルを解放すると、関連付けられたオブジェクトは固定が解除され、他に参照がない場合はガベージ コレクションの対象になります。