none
DataSet Dispose RRS feed

  • 質問

  • お世話になります。

    Dispose関数は、基本アンマネージリソースを解放するものと思っています。

    マネージリソースは、ガベージコレクションの中で解放されるし・・・

     

    ではDataSetDisposeって何を解放しているのでしょうか?
    なんで必要なのでしょうか?

     

    2010年12月7日 0:31

回答

  • マネージドリソースであっても、大量にメモリを消費するようなものはIDispoableを実装して、明示的にGCによる解放の機会を与えてやった方がいいようです。 参考)http://blogs.msdn.com/b/shozoa/archive/2010/09/08/about-resources-on-clr.aspx
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 2:03
  • MarshalByValueComponent のサブクラスだからではないでしょうか。

    MarshalByValueComponent クラスが IDisposaleをインプリメントしているので。


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 2:18
  • お世話になります。

    Dispose関数は、基本アンマネージリソースを解放するものと思っています。

    マネージリソースは、ガベージコレクションの中で解放されるし・・・

     

    ではDataSetDisposeって何を解放しているのでしょうか?
    なんで必要なのでしょうか?

     


    ugaya40 さんが紹介されている荒井さんのブログからも飛べますが、一応議論のもとになったスレッドを紹介しておきます。

    http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/860d9c36-e933-4a21-b031-e2ddc7b5ac56

    あと私見ですが、なぜ DataSet に Dispose があるのかについては、DataSet クラスが MarshalByValueComponent クラスを継承しているところが大きいような気がします。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 2:34
    モデレータ
  • Dispose() の外からみた仕様は「オブジェクトを終了状態(破棄可能状態)にする」のが基本だと思ったほうが、用法にあやまりがないのではないかと思います。

    アンマネージドリソースにしても、マネージドリソースにしても、「オブジェクトが終了状態(破棄可能状態)になった結果として、アンマネージドリソースを解放できたり、マネージドリソースをガベージコレクタが回収できたりする」という考え方です。

    • アンマネージドリソースの解放を実行することは Dispose() を実装する人と OS の仕事(=Dispose で Close などを呼び出す)
    • 特定のオブジェクトの所有するアンマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)
    • マネージドリソースの解放を実行にすることは Dispose() を実装する人と GC の仕事(=Dispose で参照を切るなど)
    • 特定のオブジェクトの所有するマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)

    といったかんじで、わかりやすいのではないでしょうか。

    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 3:12
  • ご質問内容とはズレますけど、現状のメンバに Dispose がある場合は、たとえ現状の実装が実際には何もしていなかったとしても、将来のバージョンにおいてもそうとは限らないと思いますので、私は実行するようにしています。
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 6:30

すべての返信

  • マネージドリソースであっても、大量にメモリを消費するようなものはIDispoableを実装して、明示的にGCによる解放の機会を与えてやった方がいいようです。 参考)http://blogs.msdn.com/b/shozoa/archive/2010/09/08/about-resources-on-clr.aspx
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 2:03
  • MarshalByValueComponent のサブクラスだからではないでしょうか。

    MarshalByValueComponent クラスが IDisposaleをインプリメントしているので。


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 2:18
  • お世話になります。

    Dispose関数は、基本アンマネージリソースを解放するものと思っています。

    マネージリソースは、ガベージコレクションの中で解放されるし・・・

     

    ではDataSetDisposeって何を解放しているのでしょうか?
    なんで必要なのでしょうか?

     


    ugaya40 さんが紹介されている荒井さんのブログからも飛べますが、一応議論のもとになったスレッドを紹介しておきます。

    http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/860d9c36-e933-4a21-b031-e2ddc7b5ac56

    あと私見ですが、なぜ DataSet に Dispose があるのかについては、DataSet クラスが MarshalByValueComponent クラスを継承しているところが大きいような気がします。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 2:34
    モデレータ
  • Dispose() の外からみた仕様は「オブジェクトを終了状態(破棄可能状態)にする」のが基本だと思ったほうが、用法にあやまりがないのではないかと思います。

    アンマネージドリソースにしても、マネージドリソースにしても、「オブジェクトが終了状態(破棄可能状態)になった結果として、アンマネージドリソースを解放できたり、マネージドリソースをガベージコレクタが回収できたりする」という考え方です。

    • アンマネージドリソースの解放を実行することは Dispose() を実装する人と OS の仕事(=Dispose で Close などを呼び出す)
    • 特定のオブジェクトの所有するアンマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)
    • マネージドリソースの解放を実行にすることは Dispose() を実装する人と GC の仕事(=Dispose で参照を切るなど)
    • 特定のオブジェクトの所有するマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)

    といったかんじで、わかりやすいのではないでしょうか。

    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 3:12
  • ご質問内容とはズレますけど、現状のメンバに Dispose がある場合は、たとえ現状の実装が実際には何もしていなかったとしても、将来のバージョンにおいてもそうとは限らないと思いますので、私は実行するようにしています。
    • 回答としてマーク 山本春海 2010年12月24日 8:41
    2010年12月7日 6:30
  • こんにちは、TAKAKUN さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    投稿いただいてからしばらく時間が経っているかと思いますが、みなさんからいただいたアドバイスは、ご確認いただいておりますでしょうか。

    いただいた情報は、他の方にも参考になる情報と思われましたので、勝手ながら私のほうで回答としてマーク させていただきました。
    回答いただいたみなさん、ありがとうございます。

    今後とも、MSDN フォーラムをよろしくお願いいたします。
                                                                    
    マイクロソフト株式会社 フォーラム オペレーター 山本 春海
    2010年12月24日 8:41