家・車以外で、人生で一番奮発した買い物

オブジェクトをどこで破棄するか

こんにちは。C#もしくはVBについてお教え下さい。オブジェクトの破棄をどこですればいいかわからなく、悩んでいます。

フォームには下記のオブジェクトが配置されています。
・データグリッドビュー
・検索ボタン
・閉じるボタン

動作は下記のようになります。
・フォームをロード時、データベースにアクセス。データテーブルにデータをセット。グリッドビューに表示。
・検索ボタン。データベースにアクセス。データテーブルにデータを再びセット。グリッドビューに表示。
・閉じるボタン。フォームを閉じる。
・DataTable、DataAdapter、sqlConnectionなどの変数は使い回しています。

質問:
これらのオブジェクトを破棄、disposeするのは、どのタイミングですれば良いでしょうか?
閉じるボタンを押された時でしょうか?またフォームの右上にバッテンマークがありますが、これが押された時もdispose処理を入れておいたほうがいいのでしょうか?

またはフォームを閉じた時は自動で破棄してくれるのでしょうか?
宜しくお願い致します。

A 回答 (2件)

書かれているうちで,手動によるDispose対象になるのはSqlConnectionだけですね。


コントロールは親がDisposeされるとそのままDisposeされるので。

で,IDisposableなインスタンスが自分の管理下にある場合,
・不要になったらDisposeを呼び出す
・IDisposableなインスタンスは必要最小限の範囲で使う
のがよいと思います。

SqlConnectionに関しては,コネクションプーリングに任せて必要な時のみ開いて閉じればよいでしょう。
# SqlConnectionに関して,Poolingはデフォルトtrue。
このため,
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
/* DataAdapter使ってDataTableに値を流し込む */
}
と,単一メソッドの中で開いて閉じることになります。
    • good
    • 0
この回答へのお礼

遅くなりましたが、ご回答ありがとうございました。大変参考になりました!

お礼日時:2013/12/30 22:38

C#は基本的にメモリ管理は自分でやらず、システムに自動でやってもらいます。



でも、フォームに関しては、使わなくなった時点で、明示的にdisposeしたほうが良いというのを見た気がします。
でも、私が以前創ったプログラムは、システムにお任せしました。
    • good
    • 0
この回答へのお礼

遅くなりましたが、ご回答ありがとうございました。大変参考になりました!

お礼日時:2013/12/30 22:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報