.netのオブジェクトのDisposeについて

解決


Y2  2003-08-18 20:30:36  No: 79062  IP: [192.*.*.*]

こんばんは(^^)
VB.NETに関してちょっと疑問に思ったことを質問したいのですが、

G.DrawLine(New Pen(Color.Black), New Point(0, 0), New Point(100, 200))

のようなコードを書いたとき、
New Pen()などのように無参照で作成されたオブジェクトはいつどのあたりでDisposeされるのかが分かりません。
MSDNを読むとガベージコレクタによって自動的に破棄されるとなっているのですが、↑のように無参照でオブジェクトを作成した場合、何かよくないデメリットはありますでしょうか?

これが分からずに、いつも、Disposeする必要があるオブジェクトは無参照で作成しないようにしているのですが・・・
もしデメリットがなければ↑のような書き方をしたほうがコードが短くてすみますし・・・
どなたか、知ってる方がいたらよろしくお願いします。m(__)m

編集 削除
よねKEN  URL  2003-08-19 13:16:17  No: 79063  IP: [192.*.*.*]

> New Pen()などのように無参照で作成されたオブジェクトは
> いつどのあたりでDisposeされるのかが分かりません。

ガベージコレクタが起動するまでDisposeされません。
インスタンスはその参照を保持する変数が一つもなければ、
ガベージコレクトの対象になりますが、ガベージコレクタの起動タイミングは
基本的にシステムまかせになります。
(GCクラスのCollectメソッドで明示的に起動させることもできますが
 乱用はお勧めできません)

> いつも、Disposeする必要があるオブジェクトは無参照で作成しないようにしているのですが・・・

内部的に持っているリソースをガベコレをまたずに破棄したい場合は、
無参照で作成しない方がよいでしょう。

編集 削除
Y2  2003-08-21 18:08:49  No: 79064  IP: [192.*.*.*]

そうですね、やっぱり今後も無参照で作成しないようにします。
よねKENさん的確な答えありがとうございました。(^^)

編集 削除