DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Disposeについて

環境/言語:[VB.NET VS.NET2003]
分類:[.NET]

いつも、ここで勉強させてもらっております。

いま、会社で師匠的存在のプログラマが次のようなコード
を書いたのですが、

--------------------------------------------
Form1.vb
--------------------------------------------
     :
Private Sub Kensaku_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnKensaku.Click
Dim f2 As New Form2
f2.ShowDialog(Me)
f2 = Nothing
End Sub
     :
--------------------------------------------
Form2.vb
--------------------------------------------
     :
Private Sub Owari_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Owari.Click
Me.Close()
End Sub

     :
--------------------------------------------

Form1.vbのf2.ShowDialog(Me)とf2=Nothingの間に
「f2.Dispose()」
の文はいらないのでしょうか。

なくても、動いているんですが、NewしたらDisposeしないとダメみたいなことが
雑誌に書いてあったような気がして、気になります。
どうぞ、ご回答お願いいたします。
> Form1.vbのf2.ShowDialog(Me)とf2=Nothingの間に
> 「f2.Dispose()」
> の文はいらないのでしょうか。

別の文脈で Form2 が Close() されているので、無くても問題ないはず。

でも、個人的には Dispose() すると思います。

あと、f2 = Nothing は VB6 までと違って、大した意味無いです。
ご回答、ありがとうございます。

正しくは、f2=Nothingを止めて、f2.Dispose()を
書くのが正解なのですね。
でも、Close()はDispose()の処理も含んでいるので、
f2.Dispose()も書きたくなければ、書かなくても
問題なしと言う事ですね。

すっきりしました。
解決済み!
> でも、Close()はDispose()の処理も含んでいるので、
> f2.Dispose()も書きたくなければ、書かなくても
> 問題なしと言う事ですね。

私の理解では、モーダルダイアログではCloseでDisposeが呼び出されることはありませんので、明示的にDisposeを呼び出すべきだと思います。
(管理人さんに賛成ってことで・・・。)

場合によっては、実害が出ます。
例えば、そのフォームがMSDE(データベース)へのコネクションを持ってたりして、
フォームの終了時(Close時ではなく。)にコネクションを破棄するような形態の場合、
Closeだけして安心していると、アプリ全体の終了までコネクションが「Waiting」状態の
ままになるので、接続プールに返却されずにあふれて制限モードに移行されたりします。

・・・整理されたデバッグ計画に基づいたチェックでもしない限り、こういったミスは
納品まで気づかなかったりします。
ので、Disposeを持つクラスのオブジェクトの場合、あまり意味のない場合でもDispose
する癖をつけておいた方がいいと思います。
  • 題名: Re[5]: Disposeについて
  • 著者: いがりんちゃん
  • 日時: 2005/06/06 12:22:09
  • ID: 11133
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
と言う事は、
f2=Nothingを止めて、f2.Dispose()を
書くが正解なのですね。

了解いたしました。ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板