アカウント名:
パスワード:
ところでそれ、最近の流行でいえばRuby流というか、こういう感じには書けないんでしょうか?HogeForm.ShowDialog do |form| xxxxxend
using( var form = new HogeFrom() ){ form.ShowDialog();}
formのスコープが明確になるし、Dispose()の呼び出しも保証されます。
そう。そしてusingは使っていないがちゃんとDisposeしているのにメモリリークするというのが元に書かれたバグでしょう。CE の環境がないので試せていませんが。
HogeForm.ShowDialog do |form| xxxxxend
これをこんな風に書く必要があるんでしょう。
HogeForm.ShowDialog do |form| xxxxx form = nullend
なんだそれと思ったらその感覚が正しい(笑)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
本当にバグの場合もあるけど (スコア:5, 参考になる)
はまった内容:
悪い例:
Form form = new HogeForm();
form.ShowDialog();
form.Dispose();
良い例:
Form form = new HogeForm();
form.ShowDialog();
form.Dispose();
form = null;
最後にnullを設定しないと、このフォームがガベージコレクトされず、
メモリリークします。なんだそれ。
マイクロソフトのサポートに問い合わせたところ、
マイクロソフト側でも現象を確認したそうで、
回答が「最後でnullを設定してね」でした。
マイクロソフトはバグとは言いませんでしたが、どう見てもバグですね。
メモリリークするよ~、あんたのコードが悪いんでしょ~、
なんとかしてよ~、とつつかれて大変でした。
Re: (スコア:0)
ところでそれ、最近の流行でいえばRuby流というか、こういう感じには書けないんでしょうか?
HogeForm.ShowDialog do |form|
xxxxx
end
Rubyのブロックの使い方の1つとして、
それこそ今回のよう(?)な、リソース開放の手順を隠蔽する道具として使う、というのが有るもので。
open(filename) do |f|
f.xxxx
end
などと書くと「ファイルを開いてブロック内でxxxxさせて、それが終わるとファイルを閉じる」ってのをやってくれる。
こういう書き方が出来るならば、Disposeだろうが=nullだろうが何が来ようが怖くない。みんな隠蔽できるのだから。
この
Re:本当にバグの場合もあるけど (スコア:2, 参考になる)
Re:本当にバグの場合もあるけど (スコア:1)
そう。そしてusingは使っていないがちゃんとDisposeしているのにメモリリークするというのが元に書かれたバグでしょう。CE の環境がないので試せていませんが。
これをこんな風に書く必要があるんでしょう。
なんだそれと思ったらその感覚が正しい(笑)
LIVE-GON(リベゴン)