
オブジェクトをどこで破棄するか
こんにちは。C#もしくはVBについてお教え下さい。オブジェクトの破棄をどこですればいいかわからなく、悩んでいます。
フォームには下記のオブジェクトが配置されています。
・データグリッドビュー
・検索ボタン
・閉じるボタン
動作は下記のようになります。
・フォームをロード時、データベースにアクセス。データテーブルにデータをセット。グリッドビューに表示。
・検索ボタン。データベースにアクセス。データテーブルにデータを再びセット。グリッドビューに表示。
・閉じるボタン。フォームを閉じる。
・DataTable、DataAdapter、sqlConnectionなどの変数は使い回しています。
質問:
これらのオブジェクトを破棄、disposeするのは、どのタイミングですれば良いでしょうか?
閉じるボタンを押された時でしょうか?またフォームの右上にバッテンマークがありますが、これが押された時もdispose処理を入れておいたほうがいいのでしょうか?
またはフォームを閉じた時は自動で破棄してくれるのでしょうか?
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
書かれているうちで,手動によるDispose対象になるのはSqlConnectionだけですね。
コントロールは親がDisposeされるとそのままDisposeされるので。
で,IDisposableなインスタンスが自分の管理下にある場合,
・不要になったらDisposeを呼び出す
・IDisposableなインスタンスは必要最小限の範囲で使う
のがよいと思います。
SqlConnectionに関しては,コネクションプーリングに任せて必要な時のみ開いて閉じればよいでしょう。
# SqlConnectionに関して,Poolingはデフォルトtrue。
このため,
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
/* DataAdapter使ってDataTableに値を流し込む */
}
と,単一メソッドの中で開いて閉じることになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数で値渡しと参照渡しではど...
-
C# panel内のコントロールの使...
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
エディットコントロールでEnter...
-
クラスのアドレスを引数として...
-
(UWSC) 「#32770」の意味わかり...
-
CMainFrameクラスの使い方
-
OnInitDialog()の関数の組み込み方
-
リストコントロールをウィンド...
-
CFrameWnd とCFormView2
-
DataGridViewのセルに斜線を引...
-
C++で継承元のクラスの代入演算...
-
C#で通常のbuttonコントロール...
-
[MFC] CWnd::MessageBoxの警告...
-
条件によって別のクラスのイン...
-
ダイアログクラスのコントロー...
-
VC++ 7.1 で メインウィンドウ...
-
FriendとPublicの違い。。。
-
不要になった、普通の構造体の処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# panel内のコントロールの使...
-
メモリ解放について、ご教授く...
-
ボタンを押すとラベルの文字を...
-
オブジェクト型の変数が定義さ...
-
【VC++6.0(MFC)】「Out of memo...
-
delete演算子によるメモリ解放...
-
関数で値渡しと参照渡しではど...
-
CreateObjectとはどういう意味...
-
クラスの設定について
-
VB6では、Applicationは未定義...
-
Objective-c 画像処理
-
コンストラクタ内でのthisポインタ
-
警告が消えません・・・
-
オブジェクトをどこでdisposeす...
-
C#でのコンパイル時のエラー
-
メモリリークが発生するのはど...
-
最小化したフォームを元に戻す
-
DLL作成について
-
Excel2003VBAからIE64bitを制御
-
インスタンスオブジェクトとは...
おすすめ情報