- - PR -
GC.SuppressFinalize()メソッドについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-04 16:35
引用:
------------------------------------------------------------------------------ 「メモリが解放されたことを確認したいが、ファイナライザが実行されたという事象によって確認しようとしてもGC.SuppressFinalize()によって解放されたタイミングで実行されないされないことがあるので、他のメモリ解放の確認方法はないか。」 といったことでしょうか。 ------------------------------------------------------------------------------ おっしゃるとおりです。GC.SuppressFinalize()を呼び出していた場合に、そのオブジェクトにガベージコレクションが実行される事実を確認したいためです。 引用: ------------------------------------------------------------------------------ 弱い参照は、参照しているオブジェクトがGCの対象になることを妨げません。 そして、参照しているオブジェクトがGCによりメモリが解放されるとそれが分かります。 WeakReferenceというクラスを使ってみてください。 ------------------------------------------------------------------------------ 少し調べてみましたが、大変興味深いものです。 有難うございます。早速勉強してみたいと思います。 | ||||||||
|
投稿日時: 2007-06-04 22:52
なぜ、ガベージとしてコレクトされたことを確認したいのでしょう? 「メモリ リークが発生している。原因はわからないんだけど、SuppressFinalize しているからじゃないだろうか?」ってことじゃないでしょうか。 「マネージド メモリはリークしない」んですけどね。でなきゃ「マネージド」じゃないでしょ? (アンマネージド リソースは、リークするかもしれませんけど。) 参考: Deep C++:ゴーザー・ザ・デストラクタ<msdn.microsoft.com> アンマネージ リソースをクリーンアップするための Finalize および Dispose の実装<microsoft.com> ガベージコレクション入門: Microsoft .NET Framework の自動メモリ管理 Part I<microsoft.com> _________________ | ||||||||
|
投稿日時: 2007-06-06 11:00
引用:
-------------------------------------------------------------------------------- なぜ、ガベージとしてコレクトされたことを確認したいのでしょう? 「メモリ リークが発生している。原因はわからないんだけど、SuppressFinalize しているからじゃないだろうか?」ってことじゃないでしょうか。 -------------------------------------------------------------------------------- 参考書にGC.SuppressFinalize()について書いており、コーディングしていてふと疑問に思ったためです。実際にリークが発生しているというわけでは有りません。 参考に貼っていただいたリンク有難うございます。勉強になります。 |