C#変数は、型が宣言されている場所(たとえばstring s;
)でインスタンス化され、現在のスコープの閉じ中括弧で解放されます。
// Operates with Q memory
void FantasyMethod() {
var o = new BigObject();
{
var temp = new BigObject();
Populate(temp); // Populates o1 with N megabytes of data
o = PerformSomeOperationsOn(temp); // Returns a BigObject of size M (M is close to N)
// Currently, M+N memory is occupied, we have Q-M-N free
}
// Let's tell the garbage collector to catch up
GC.Collect();
GC.WaitForPendingFinalizers();
// Currently, M memory is occupied
DoUsefulStuffWith(o); // This method can only work if at least Q-M-N/2 memory is free
}
これの利点の1つは、関数が戻る前に大きな変数を解放できることです。上記の(些細な)ブロックでは、大きな変数が不要になったらすぐに破棄することで、限られた使用可能なメモリを使用しています。
- 上記は正しいですか?
- これを行うのは良い考えですか(私は個人的な意見や好みではなく、賛成と反対の議論に興味があります)?メソッドとしてネイキッドブレースブロックを抽出すると、メモリの使用効率が低下しますか?読みやすさの理由で新しいメソッドを作成したくない場合はどうなりますか?