[解決済み】DataSetとDataTableはDispose()すべきですか?
質問
DataSet と DataTable は両方とも IDisposable を実装しているので、従来のベストプラクティスでは、それらの Dispose() メソッドを呼び出すべきでした。
しかし、これまで読んだ限りでは、DataSetとDataTableは実際にはアンマネージド・リソースを持っていないので、Dispose()は実際にはあまり意味がないようです。
それに
using(DataSet myDataSet...)
DataSetはDataTablesのコレクションを持っているからです。
したがって、安全のために、myDataSet.Tablesを繰り返し処理し、それぞれのDataTablesを破棄してから、DataSetを破棄する必要があります。
では、すべてのDataSetsとDataTablesに対してDispose()を呼び出すのは面倒なことなのでしょうか?
追記
DataSetはディスポーザブルにすべきとお考えの方へ。
一般に,ディスポーザブルのパターンとしては
using
または
try..finally
というのは、Dispose()が呼ばれることを保証したいからです。
しかし、これはコレクションの場合、すぐに醜態をさらすことになります。 たとえば、Dispose()のコールのひとつが例外をスローした場合、どうするのでしょうか? 次の要素のディスポーザブルを続けるために、それを飲み込みますか(これは "bad" ですね)?
それとも、myDataSet.Dispose()を呼び出すだけで、myDataSet.TablesのDataTablesを廃棄することは忘れた方がいいのでしょうか?
どのように解決するのですか?
ここでは、DataSetにDisposeが必要ない理由を説明するためのいくつかの議論を紹介します。
DataSetのDisposeメソッドは継承の副作用で存在するだけで、実際には最終化で何か役に立つことをするわけではありません。
DisposeはDataTableとDataSetオブジェクトに対して呼び出すべきですか? には、MVPによる解説もあります。
system.data 名前空間 (ADONET) には、以下のものは含まれません。 アンマネージドリソース したがって、以下のような場合、それらを廃棄する必要はありません。 何か特別なものを自分で追加していない限りは。
Disposeメソッドとデータセットについて理解する? には、権威あるScott Allen氏のコメントがあります。
実際には、DataSetのDisposeはほとんどメリットがないので、ほとんど行いません。
つまり、そこでのコンセンサスは 現在、DataSetのDisposeを呼び出す正当な理由はありません。
関連
-
datatable パラメータとサーバーサイド ajax 関数の設定と指示
-
[解決済み] DataTableに対するLINQクエリ
-
[解決済み] C#のFinalize/Disposeメソッドの使用について
-
[解決済み】HttpClientとHttpClientHandlerはリクエストの間にディスポされなければならないのでしょうか?
-
[解決済み】DataSetとDataTableはDispose()すべきですか?
-
[解決済み] データテーブル Show Entries ドロップダウンを非表示にし、Search ボックスを残す
-
[解決済み] ガベージコレクタはIDisposable.Disposeを呼んでくれるのですか?
-
[解決済み] データテーブルとデータセット
-
[解決済み] IDisposableが全クラスに広がるのを防ぐには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン