アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
本当にバグの場合もあるけど (スコア:5, 参考になる)
はまった内容:
悪い例:
Form form = new HogeForm();
form.ShowDialog();
form.Dispose();
良い例:
Form form = new HogeForm();
form.ShowDialog();
form.Dispose();
form = null;
最後にnullを設定しないと、このフォームがガベージコレクトされず、
メモリリークします。なんだそれ。
マイクロソフトのサポートに問い合わせたところ、
マイクロソフト側でも現象を確認したそうで、
回答が「最後でnullを設定してね」でした。
マイクロソフトはバグとは言いませんでしたが、どう見てもバグですね。
メモリリークするよ~、あんたのコードが悪いんでしょ~、
なんとかしてよ~、とつつかれて大変でした。
Re:本当にバグの場合もあるけど (スコア:0)
Re: (スコア:0)
あれはGCでなくリファレンスカウンタでしかなく、NothingをSetする必要がある。
しかしC#/VB.NETはGC。
.NET Compact Frameworkはその手の不備ありまくりなので、null/Disposeは明示的にするのが吉。
Re:本当にバグの場合もあるけど (スコア:2)
だから、 Dispose() を明示的にコールしているのに、リソースが解放されないよ、変な実装だね。って話でしょう。
Re: (スコア:0)
変数にnullを設定して参照をなくさないとGCが働かないのが不具合というのが元コメント。
本来はスコープを抜けたら参照が破棄されるので一々nullを設定する必要はない。
Dispose()で解放するリソースは、この場合はformの中。
form自体は参照が残っているのでまだGCの対象外。
Dispose()呼ぶだけじゃ駄目という悲しい現実。
「「書かせること」が変わってない」は確かに同意。
むしろ例外がある分余計辛いかも。
Re: (スコア:0)
Re: (スコア:0)