7

念のため、バイト配列とこの固定配列に GCHandle を固定していることを前提とします。

GCHandle.Free() メソッドが呼び出されると、単にハンドルを解放し、元のバイト配列の管理を GC に引き渡すだけなので、その配列へのアクティブな参照がある場合、まだ破棄されません。 ?

4

2 に答える 2

7

あなたが正しいです。GCHandle同じオブジェクトへの別のハンドルです。少なくとも 1 つある限り、オブジェクトは破棄されません。

GCHandleただし、タイプで割り当てることができますWeak。これにより、GC がオブジェクトをGCHandle指している唯一のオブジェクトである場合にオブジェクトを収集できます (「通常の」参照もある場合、悪いことは何も起こりません)。

于 2013-03-04T16:53:53.517 に答える
4

はい。

ハンドルがスコープ外になったら、Free メソッドを呼び出して明示的に解放する必要があります。そうしないと、メモリ リークが発生する可能性があります。固定されたハンドルを解放すると、関連付けられたオブジェクトは固定が解除され、他に参照がない場合はガベージ コレクションの対象になります。

-- http://msdn.microsoft.com/en-us/library/khk3k17t.aspx

于 2013-03-04T16:54:47.770 に答える