tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: クラスの破棄について
投稿日: 2009/05/12(Tue) 13:57
投稿者ダンボ
Hongliangさん、ご回答有難うございます。2、3確認を。


>> ・マネージドクラスの破棄は = Nothing だけで良い。
  →「なにもする必要が無い。参照が無ければいつか破棄される。不要な参照を消して
  おくだけでよい。」と理解しました。


>インスタンス自体の破棄にはなりません(そもそもマネージドオブジェクトは
> 明示的にインスタンスを破棄することはできません)。
  →今回実験したように、Disposeメソッドを実装して呼べば明示的にインスタンスを
   破棄することが可能ですよね?


>そのインスタンスがほかから参照されていなければ、そのうち GC が片付けます。
  →Profileインスタンスが参照されていないことを大分しつこく確認して
   GC.Collect()を呼んでも回収されなかったのに、Profile.Disposeメソッドを実装して
   Dispose()を呼んだらメモリ増加が止まったのは何故でしょうか?
   Dispose()によって強制的にProfileインスタンスが破棄されたと思えるのですが。

>そもそも Finalize  メソッドは明示的に呼び出せません。
    →Implements IDisposable後はFinalizeメソッドを呼び出せました。
   もっともAPPから呼んでも意味が無いと感じました。
     フレームワークから呼び出されてアンマネージドリソースの解放忘れや
   その他インスタンス破棄時にどうしてもしておきたいことを記述するためにあるのですね。
   (それならFinalize「イベント」のほうが理にかなっているが?)

私の作成したProfileClassはマネージドクラスですか?
New()で作成すること、Disposeメソッドが無いこと、.NET Frameworkのクラスライブラリしか
使っていないのでマネージドクラスだと思えるが、そうすると
・Profileインスタンスの参照を切ってGC.Collect()を呼ぶ→回収されず
・Profile.Disposeメソッドを実装してDispose()を呼ぶ→回収された
という現象が納得いかないです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。