- PR -

【WindowsForm】Disposeのタイミングについて

1
投稿者投稿内容
kiyo
会議室デビュー日: 2003/12/15
投稿数: 3
投稿日時: 2004-01-14 10:17
いつもお世話になっております。

VisualStudio2003 .NET Framework1.1
VB.NET

で開発を行っています。

Disposeを実施するタイミングについていろいろ調べていたのですが、
(SqlConnectionなどにたいして)

私には難しすぎるし、まだまだ議論されていたりと、どうしていいのかわからない状態です。
とりあえずGCに任せておこうとおもっています。
しかし、1つだけ現時点で気になることがあります。
Windowsフォームデザイナで生成されたコードの中に以下のようなコードが記述されてます。

###############################################################################

  ' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

###############################################################################

これは何なのか?どのタイミングでこの処理を行っているのか?

勝手な想像ですが、フォームがCloseした時にこの処理が呼ばれて、
Dispose()していると想像しているのですが正しいでしょうか?

ご存知の方、恐れ入りますが教えてください。



[ メッセージ編集済み 編集者: kiyo 編集日時 2004-01-14 10:21 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-14 14:08
こんにちわ。諸農です。

引用:

kiyoさんの書き込み (2004-01-14 10:17) より:

これは何なのか?どのタイミングでこの処理を行っているのか?

勝手な想像ですが、フォームがCloseした時にこの処理が呼ばれて、
Dispose()していると想像しているのですが正しいでしょうか?



SDK HELPのForm.Dispose(Boolean)の解説を見ると、
引用:

このメソッドは、パブリック メソッド Dispose() と Finalize メソッドによって
呼び出されます。Dispose() は、disposing パラメータに true を設定して、
プロテクト メソッド Dispose(Boolean) を呼び出します。 Finalize は、
disposing パラメータに false を設定して、 Dispose を呼び出します。


とのことです。
あとは、Closeの解説やFinalizeの解説、
「アンマネージリソースのクリーンアップ」等々が参考になるかもしれません。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-01-14 15:03
引用:

kiyoさんの書き込み (2004-01-14 10:17) より:
しかし、1つだけ現時点で気になることがあります。
Windowsフォームデザイナで生成されたコードの中に以下のようなコードが記述されてます。

#######################################################

  ' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

######################################################

これは何なのか?どのタイミングでこの処理を行っているのか?

勝手な想像ですが、フォームがCloseした時にこの処理が呼ばれて、
Dispose()していると想像しているのですが正しいでしょうか?




ここでDisposeメソッドがオーバーライドされているのは、
デザイナを表示するときに、Formやその上に配置されているコントロール(コンポーネント)群を
実際にインスタンス化しているので、その後始末用に個々のDisposeメソッドをコールするためだと思います。
(If Not (components Is Nothing) Then 〜 End Ifの部分)

なので、とりあえずDisposeするタイミングという本題とは無関係の部分です。

SqlConnectionであれば使い終わったらすぐにCloseしておけばいいかと思います。



[ メッセージ編集済み 編集者: よねKEN 編集日時 2004-01-14 15:05 ]
kiyo
会議室デビュー日: 2003/12/15
投稿数: 3
投稿日時: 2004-01-14 18:46
諸農さん、よねKENさんありがとうございます。

>ここでDisposeメソッドがオーバーライドされているのは、
>デザイナを表示するときに、Formやその上に配置されているコントロール(コンポーネント)>群を
>実際にインスタンス化しているので、その後始末用に個々のDisposeメソッドをコールするた>めだと思います。
>(If Not (components Is Nothing) Then 〜 End Ifの部分)

でわたしの疑問は解決しました。
Disposeの件についてはまたこれから調査していきたいとおもいます。
大変参考になりました。ありがとうございます。
1

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