- PR -

GC.SuppressFinalize()メソッドについて

投稿者投稿内容
jornada690
常連さん
会議室デビュー日: 2006/06/13
投稿数: 25
投稿日時: 2007-06-04 16:35
引用:
------------------------------------------------------------------------------
「メモリが解放されたことを確認したいが、ファイナライザが実行されたという事象によって確認しようとしてもGC.SuppressFinalize()によって解放されたタイミングで実行されないされないことがあるので、他のメモリ解放の確認方法はないか。」
といったことでしょうか。
------------------------------------------------------------------------------

おっしゃるとおりです。GC.SuppressFinalize()を呼び出していた場合に、そのオブジェクトにガベージコレクションが実行される事実を確認したいためです。

引用:
------------------------------------------------------------------------------
弱い参照は、参照しているオブジェクトがGCの対象になることを妨げません。
そして、参照しているオブジェクトがGCによりメモリが解放されるとそれが分かります。
WeakReferenceというクラスを使ってみてください。
------------------------------------------------------------------------------
少し調べてみましたが、大変興味深いものです。
有難うございます。早速勉強してみたいと思います。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-06-04 22:52
引用:

引用:

「メモリが解放されたことを確認したいが、ファイナライザが実行されたという事象によって確認しようとしてもGC.SuppressFinalize()によって解放されたタイミングで実行されないされないことがあるので、他のメモリ解放の確認方法はないか。」


おっしゃるとおりです。GC.SuppressFinalize()を呼び出していた場合に、そのオブジェクトにガベージコレクションが実行される事実を確認したいためです。


 なぜ、ガベージとしてコレクトされたことを確認したいのでしょう?
「メモリ リークが発生している。原因はわからないんだけど、SuppressFinalize しているからじゃないだろうか?」ってことじゃないでしょうか。

 「マネージド メモリはリークしない」んですけどね。でなきゃ「マネージド」じゃないでしょ?
(アンマネージド リソースは、リークするかもしれませんけど。)


参考:
Deep C++:ゴーザー・ザ・デストラクタ<msdn.microsoft.com>
アンマネージ リソースをクリーンアップするための Finalize および Dispose の実装<microsoft.com>
ガベージコレクション入門: Microsoft .NET Framework の自動メモリ管理 Part I<microsoft.com>

_________________
jornada690
常連さん
会議室デビュー日: 2006/06/13
投稿数: 25
投稿日時: 2007-06-06 11:00
引用:
--------------------------------------------------------------------------------
なぜ、ガベージとしてコレクトされたことを確認したいのでしょう?
「メモリ リークが発生している。原因はわからないんだけど、SuppressFinalize しているからじゃないだろうか?」ってことじゃないでしょうか。
--------------------------------------------------------------------------------

参考書にGC.SuppressFinalize()について書いており、コーディングしていてふと疑問に思ったためです。実際にリークが発生しているというわけでは有りません。
参考に貼っていただいたリンク有難うございます。勉強になります。


スキルアップ/キャリアアップ(JOB@IT)