トップ回答者
DataSet Dispose

質問
回答
-
お世話になります。
Dispose関数は、基本アンマネージリソースを解放するものと思っています。
マネージリソースは、ガベージコレクションの中で解放されるし・・・
ではDataSetのDisposeって何を解放しているのでしょうか?
なんで必要なのでしょうか?
ugaya40 さんが紹介されている荒井さんのブログからも飛べますが、一応議論のもとになったスレッドを紹介しておきます。
あと私見ですが、なぜ DataSet に Dispose があるのかについては、DataSet クラスが MarshalByValueComponent クラスを継承しているところが大きいような気がします。
ひらぽん http://d.hatena.ne.jp/hilapon/- 回答としてマーク 山本春海 2010年12月24日 8:41
-
Dispose() の外からみた仕様は「オブジェクトを終了状態(破棄可能状態)にする」のが基本だと思ったほうが、用法にあやまりがないのではないかと思います。
アンマネージドリソースにしても、マネージドリソースにしても、「オブジェクトが終了状態(破棄可能状態)になった結果として、アンマネージドリソースを解放できたり、マネージドリソースをガベージコレクタが回収できたりする」という考え方です。
- アンマネージドリソースの解放を実行することは Dispose() を実装する人と OS の仕事(=Dispose で Close などを呼び出す)
- 特定のオブジェクトの所有するアンマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)
- マネージドリソースの解放を実行にすることは Dispose() を実装する人と GC の仕事(=Dispose で参照を切るなど)
- 特定のオブジェクトの所有するマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)
といったかんじで、わかりやすいのではないでしょうか。
- 回答としてマーク 山本春海 2010年12月24日 8:41
すべての返信
-
お世話になります。
Dispose関数は、基本アンマネージリソースを解放するものと思っています。
マネージリソースは、ガベージコレクションの中で解放されるし・・・
ではDataSetのDisposeって何を解放しているのでしょうか?
なんで必要なのでしょうか?
ugaya40 さんが紹介されている荒井さんのブログからも飛べますが、一応議論のもとになったスレッドを紹介しておきます。
あと私見ですが、なぜ DataSet に Dispose があるのかについては、DataSet クラスが MarshalByValueComponent クラスを継承しているところが大きいような気がします。
ひらぽん http://d.hatena.ne.jp/hilapon/- 回答としてマーク 山本春海 2010年12月24日 8:41
-
Dispose() の外からみた仕様は「オブジェクトを終了状態(破棄可能状態)にする」のが基本だと思ったほうが、用法にあやまりがないのではないかと思います。
アンマネージドリソースにしても、マネージドリソースにしても、「オブジェクトが終了状態(破棄可能状態)になった結果として、アンマネージドリソースを解放できたり、マネージドリソースをガベージコレクタが回収できたりする」という考え方です。
- アンマネージドリソースの解放を実行することは Dispose() を実装する人と OS の仕事(=Dispose で Close などを呼び出す)
- 特定のオブジェクトの所有するアンマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)
- マネージドリソースの解放を実行にすることは Dispose() を実装する人と GC の仕事(=Dispose で参照を切るなど)
- 特定のオブジェクトの所有するマネージドリソースを解放できる状態にすることはオブジェクトを使用する人の仕事(=Dispose を呼ぶ)
といったかんじで、わかりやすいのではないでしょうか。
- 回答としてマーク 山本春海 2010年12月24日 8:41
-