質問

データセットおよびDataTableの両方を実施IDisposableので、従来のベストプラクティスって、自分のDispose()。

しかし、から何を読んで、データセットおよびDataTableいいでポリシー資源、Dispose()はなんなんです。

プラスできるようになっ利用 using(DataSet myDataSet...) でのデータセットコレクションのDataTables.

ですから、安全ですが、今までの必要性に対して繰り返し処理を実行するよmyDataSet.テーブル、廃棄のそれぞれのDataTables、その処分のデータセットである。

ではではーと呼Dispose()すべてのデータセットおよびDataTables?

補足:

人の考えるデータセットにて処分されるべきであり:一般的には、パターン処理に使用 using または try..finally, です保証するDispose()が呼び出されます。

しかし、これが醜実に高速のためのコレクションに納めるものです。例えば、あなたはどうすればいいの電話Dispose()スローされる例外?なお飲み込んで(これは"悪い"うまで継続できる処分の次の要素かどうかが判別されます。

または、いまさらだけ呼myDataSet.Dispose(),とをお忘れの処理のDataTablesにmyDataSet.テーブル?

役に立ちましたか?

解決

こちらはカップルでの議論を説明するのはなぜ処理を必要としないデータセットである。

処分又は処分?:

の処理方法データセットが存在するだけでなく副作用の継承とされているとは思いませんが、実際の使用頻度の高いものを取り揃えのファイナライズ.

べき処理に対して呼び出されるDataTable、データセットオブジェ? 一部の説明からMVP:

のシステム。データの名前空間(ADONET)が含まれない ポる。は必要ありません処理の方として だ追加されません自分も特別です。

理解の処理方法、データセット? は、とコメントから権限のスコットアレン:

にpraticeにしたがって処分するデータセットを提供しているため、少し利益"

その合意があること 在していない理由に呼び処分にデータセットである。

他のヒント

Update(月1日2009年):

思を改正するこの答えでは魚とご飯、味噌汁、小鉢、回答した不十分なものである。

の分析 適用するオブジェクトを要する後処理によるポイント慣行などを受け入れ、表面なく正確に、より深く理解しました

しかし、ここではデータセットDataViews,DataTables 抑制する決定とそのコンストラクタ –この呼び出しDispose()に関して明示的には何も行いません。

おそらく、こうでもないでポリシー資源のいにもかかわらず MarshalByValueComponent する引当金のためのポリシー資源は、これらの特定の実装がないのが必要であると認めた場合、その削完了.

(た。純著者の注意を抑制する決定の種類通常はを占める最も記憶に語りかけているが、この実践総finalizableます。)

にもかかわらず、これらの詳細につきましては-文書化して以来、日本のみならず。NETフレームワーク(ほとんど8年前)には驚きるだ本質的に残したご自身のデバイスのふるい分けあう相反する曖昧な材料を入れるとは悔しい時もあり完全な理解の枠組みに依存しておりま日).

多くの読書、"わらびもち"をここで私の理解

場合にはオブジェクトファイナライズが必要です 占有するメモリ以上でのニーズを理由は以下の通りです:a)任意の型が定義されているデストラクタ(または継承し"タイプが定義されているデストラクタするお問い合わせなどはこちらfinalizable;b)割り当て前のコンストラクタ走)は、ポインタが配置され、完了キュー;c)finalizableオブジェクトがあると 2集 水を回収の代わりに、標準の1);d)を抑制する決定となくオブジェクトの完了キューにて報告。FinalizeQueueにSOS) このコマンドは誤解をかの対象の完了キューにないもかの対象の完了キューが未だ不十分な項目もありますが決定いものがあるコマンドです。)

を抑制するファイナライズがプランを選んでネットでのオブジェクトのヘッダに指示するランタイムする必要はありませんし、そのFinalizer呼び出する必要がありませんのFReachableキュー);で策定のキュー(続報!FinalizeQueueにSOS)

のDataTable,データセット仕様dataviewの授業はすべての民のMarshalByValueComponent、finalizableオブジェクトできる(潜在的に)対応ポリシー資源の

  • でDataTable,データセット仕様dataviewなポリシー資源、抑制の決定とそのコンストラクタ
  • これは珍しいパターンが解放され、呼び出し側からの心配を呼び出し処理後の利用
  • このことDataTables可能性のあるできるようにしてくれます。異なるデータセットがなぜデータセットを気にしない処分子DataTables
  • そのためこれらのオブジェクトの下に表示されます!FinalizeQueueにSOS
  • しかし、これらのオブジェクトが再後のシングルコレクションのように、非finalizableカー

4新規参照):

独自の回答:

多くの誤解を招き、一般的には非常に貧しい答え合-人の水揚げされたこのプログラムを使ってこの無視し、ノイズと読取り下記の参考文献を参照。

間違いなく、処分 すべき という問Finalizableオブジェクト。

DataTables Finalizable.

呼び出し処理 大きく 速度の再生のメモリを消費します。

MarshalByValueComponent 電話 GC.SuppressFinalize(こ) そのDispose()-飛ることを待ち数十人がいない場合は何百Gen0蔵前にメモリを再生:

この基本的な理解を策定し することがで割も非常に重要な もの:

第一に、オブジェクトの必要性の確 ライブ以上のオブジェクトなのです。実際、このような生きくなります。例えば、仮にオブジェクト はgen2必要です。完成する予定で オブジェクトはまだgen2で とすることがある回収まで、次の gen2の収集などが挙げられる。ることが 非常に長い時間も、実際、 いうもので 長い時間がgen2集 は高価であることがどうなっているか示されてい が起こる非常に必要である。以上 オブジェが必要な決定が お待ちして数十人がいない場合 何百ものgen0蔵前 そのスペースが再生.

第二に、オブジェクトの必要性の確 原因を担保す。以降、 内部オブジェクトのポインタでなければならないので 有効にするだけでなく、オブジェ 直接必要なファイナライズリンガー メモリが全てのオブジェクト は、直接-間接的に も残る。ば ツリーのオブジェた⾼ 単一のオブジェクトに必要な 決定と、その後のツリー も残る長 時間という議論します。であ そのための重要な使用finalizers 控えめにそれらのオブジェクト る少なくして、内部オブジェクト ポインタのことです。ツリー内の 例ったので、簡単に 問題を回避するための移動 資源を必要とする決定を 別のオブジェクトを 参照オブジェクトのルート のです。この緩やかな変更 だけのオブジェクト(ばね 小さなオブジェクト)を残すの 後処理コストが少なくてすみます。

最後に、オブジェが必要なファイナライズ 作成作業のfinalizerます。が決定プロセス 複雑であり、 finalizerスレッド間 多くの時間芸能人、 の原因となるば仕事 従ってことはあるオブジェクトを残す 待って決定.そのため、 が重要であること finalizersなって 可能です。覚えているのは すべてのオブジェクトのポインタの有効性 終了処理中での 場合にはそのポインタが オブジェクトを既に 確かにこれ より便利です。では一般的に安全です を避ける以下のオブジェクトでポインタ 完了コードのもの ポインタが有効になります。安全で、短 完了コードは最高です。

だから人の見た100番手双糸MBsの非参照DataTablesにGen2:これは非常に重要な、完全に惜しに応答す。

参考文献:

1 - http://msdn.microsoft.com/en-us/library/ms973837.aspx

2 - http://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1104.入 http://www.dotnetfunda.com/articles/article524-net-best-practice-no-2-improve-garbage-collector-performance-using-finalizedispose-pattern.aspx

3 - http://codeidol.com/csharp/net-framework/Inside-the-CLR/Automatic-Memory-Management/

おので何かと便利話処分場では何もしていない。NET Framework身が保証で大阪、名古屋にオフィスがあり、将来のバージョンによる非効率な資源利用に

場合でもオブジェクトではないでポリシー資源、廃棄がGCによる破オブジェクトです。一般の場合、オブジェクトを実装しIDisposableしDispose()は呼び出されます。

るかどうかDispose()実際にはそのよ指定されたクラス.の場合はデータセットDispose()の実装から継承されMarshalByValueComponent.で削除しますから自分のコンテナや電話処理イベントです。ソースコードを以下に分解す。ネリフレクタ):

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        lock (this)
        {
            if ((this.site != null) && (this.site.Container != null))
            {
                this.site.Container.Remove(this);
            }
            if (this.events != null)
            {
                EventHandler handler = (EventHandler) this.events[EventDisposed];
                if (handler != null)
                {
                    handler(this, EventArgs.Empty);
                }
            }
        }
    }
}

Doを作成するDataTablesの理由を教えてください。で繰り返し処理を通じて、子どものanyオブジェクト(データセットである。テーブル)は、通常必要とせず、そのままの仕事に親会社の処理すべての子会員とする。

一般的にルール:作成した場合で実施しIDisposable棄します。なかった場合には、代わりに創造していくかについて、その中に投下しないでくださいので、その親会社のオブジェクトです。それはそのオブジェクトに特殊なルールは、チェックしています。

ます。純3.5で明示的には"廃棄することで使用しないときはもう"、そういう思います。

私は処分いつでもオブジェクトを実装しIDisposeable.である理由です。

データセットできる巨大なメモリゾ.は早ければ早いほどで利用できます。づくりを行っています。

更新

でって5年になって答えます。まだまだことがあると思います。がある場合は処分の方法で呼び出す必要があが終わった時点で、オブジェクトです。のIDisposeインターフェースを実装です。

ご意又はこのような質問にもガーベッジコレクション、そして設定でき、データセットおよびdatatablesをnullに明示的または利用のキーワードを使うのです。処分などTetraneutronいですよね。GCの収集データセットオブジェクトを参照されないものは対象外です。

私の願いで強制民投票が実際にコメントの書き前downvotingたと言えるのでしょうか。

データセットを実施IDisposable徹底MarshalByValueComponentを実施するIDisposable.以降、データセット管理が不利益を呼び出し処理.

利用するようにして明確になります。でも私にとってのための処理.

DataTable dt = GetDataSchema();
//populate dt, do whatever...
dt.Clear();

なDispose() でのデータセットを継承MarshalByValueComponentクラスMarshalByValueComponent実施IDisposableェ

まず私は確認処理は、データセットである。その反射板からredgateるよう、お手伝いいたします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top