質問: C#のガベージコレクションで質問です
回答: .NETの実装を把握しきっているわけではないので確実なことではないですが、速くなるということはないと思います。 あってもなくてもローカル変数がfooメソッドのスコープを抜けた地点で参照がなくなり、GCの対象になることに変わりはありません。 もしかすると、bbb = null;の文は最適化によって削除される可能性があります。 そして、削除されなかった場合。逆に解放のタイミングが遅れる可能性さえ出てくると思われます。 void foo() { ClsBig bbb = new ClsBig();//ClsBigは巨大なクラス //bbb操作 //bbbの操作終了 //bbbを使わないほかの処理 //bbb = null; 書く/書かない } となったばあい。 null代入を書いていないとGCはbbbの操作が終了し、[bbbを使わないほかの処理]中に「bbbはもう参照されることがない」と判断し、解放を行えます。(nullを代入していなくても自動で判断されるはずです。) しかし、最後に代入文があると、「nullを代入する部分までbbbの参照は有効で、解放してはいけない」と処理され、[bbbを使わないほかの処理]中にもbbbはGCから免れます。 しても変わらない可能性が高いですが、代入をするならbbbの操作終了時にするぐらいでしょう。 と、GC.KeepAliveやHandleRefあたりの記述から私はそう認識しているのですが、それほど自信はないです。