- - PR -
【C#】参照型の参照渡しはメモリリークを起こす?
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-04 00:19
そう言えばそうですね。ではズバッと。 前回も言いましたが、Dispose とメモリリークを同じ次元で考えないで下さい。 理由は、Jitta さんの仰っている通りです。 「メモリの解放」なんて明示的に出来ません。Dispose 呼び出しはあくまで「リソース」の解放です。
C や C++ の経験があってその影響でしょうか?「インスタンス」は new した数分しか作られません。(もちろん構造体は違います) 代入でインスタンスが増えることはありません。 なちゃさんも仰っていますが、ある種のシナリオでは Dispose を完全に呼び出すことは不可能です。 またまた手前味噌ですが。 http://blogs.wankuma.com/shuujin/archive/2006/03/01/21602.aspx 今回の場合は、GetDataSet に DataSet 渡してしまっていることから、呼び出し先が DataSet の参照をどこかに保持している可能性があります。なので、Dispose の呼び出しを安易に行う事が出来ません。
「全ての参照が外れていたら、GC が起動した時だよ。そうでないなら永久にされない」でOKです。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-08-04 14:36
Jittaさん。囚人さん。ぜうすさん。
お返事有難う御座います。 > 「ここに容器を作ってくれ」って渡すんだったら、渡す側が new することないやん。 > 「ここに入れてくれ」って渡すんだったら、ref にする意味ないやん。 ご指摘はごもっともです。。 #参照型について勉強し直して、最近になってようやく理解できました・・・ > 提示されているコードだと、リークすると考えられている DataSet は“空”ですから、 > リークするものがないですよね? 確かに、言われてみればその通りですよね・・・ > なちゃさんも仰っていますが、ある種のシナリオでは Dispose を完全に呼び出す > ことは不可能です。 > またまた手前味噌ですが。 参考にさせて頂きます。 これで何とか、元請けの方に説明が出来そうです。 大変勉強になりました。 |