.NETのガベージコレクトは優秀で強力なんだけど、予測できない動きをすることも多く困るというか途方にくれてしまう時があります。
変数スコープの最後までオブジェクトは生きているという誤解 – NyaRuRuの日記
(C# では) 変数スコープの最後までオブジェクトは生きているというこの誤解,あちこちで目にしますが,実際にはそんなことは保証されていません.C# コンパイラは,スコープ終了点までオブジェクトを延命するようなコードを必要もなく埋め込みません.その結果,デスクトップ CLR では比較的簡単に「スコープ終了前の回収」を見ることができます.特徴的なケースでは,生成したオブジェクトのコンストラクタが完了する前に,そのオブジェクトが回収されることすらあります
ただ、コードさえしかり書けばコントロールすることは可能なので、予期しないヌルポでびっくりという方は上で紹介されている書籍や、MSDNの解説をじっくり読んでみると良いと思います。
過去のMSDNマガジンにも良い記事があります。(確か2001年頃なので、ASCIIから出ていたMSDNマガジンを集めたDVDをもっておられる人は探してみると良いかもしれません。)
コメント