[csharpll:0314] <教> リソース開放のタイミング

Subject:
[csharpll:0314] <教> リソース開放のタイミング
From:
FUKUDA, Fumiki <fukuda.fm@...>
Date:
Mon, 20 Mar 2006 15:21:09 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1506
Message-Id:
<083201c64be6$7b0abb60$e5d2060a‐at‐stf.ncos.nec.co.jp>
επιστημηです。

すんません、基本的なこと確認させてくださいませ。
C#では(.NETならなんでもいいけど)、メモリの開放はガベコレ時に
行われますけど、メモリ以外のリソースは何時開放されるんでしょか?

たとえば:
 StreamWriter sw = System.IO.File.CreateText("ほげほげ");
 sw.WriteLine("うにゃうにゃ");
 ...

こんなとき、ファイルがクローズされるのは何時なんでしょか?
デストラクタ内で後始末(Close)してるなら、
ガベコレ直前にデストラクタが動いて…ことになるんすか?

裏を返せばガベコレなんて何時動くかわかったもんじゃないから、
確実にClose()したいなら明示的にClose()を呼べ。ってことでしょか。

あるいはデストラクタ内でCloseしてるんなら、using(...)で囲んで
おけばスコープ外れるときにDisposeされ、そこでデストラクタが呼ばれて
めでたくCloseなのかな?

いや、Javaのときも感じたんだけど、
「ガベコレあるから散らかしっぱなしにできて楽ちん」
ってのは"うそっぱち"ですよね? 少なくともメモリ以外のリソース
を使ったんならプログラマが責任もってお片づけしたらんと。

とかなんとか考えてると"C++と大差ないぢゃん"て思ふ。
# んー、まだまだ.NETオンチだ orz

スレッド

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here