我想知道使用大括号在方法调用中定义范围是否会“强制”或将信息提供给C#垃圾收集器以释放该块中分配的内存,因此,让我们将下面的代码作为例如:
void MyMethod() {
//here some important code, like reading some information from disk, api, whatever.
//Open brackets to define scope...
{
var myClassObject = new MyClass();
myClassObject.DoSomething();
var mySecondClassObject = new MySecondClass();
mySecondClassObject.DoSomething();
}
//I expect that at this moment, GC would release myClassObject and MySecondClassObject from the Heap...
//is that correct?
//here do something else
/...
}
答案 0 :(得分:1)
简而言之:不,您不能强迫垃圾收集器处置此分配的!class!立即处置。
长:您可能会。您只需将变量设置为Null
并调用GC.Collect()
。这将调用普通的GC集合,并且可以在其集合中包括以前的未引用类,但是不会发生Garantie的情况。但这将为您的整个应用程序调用GarbageCollector,而不仅仅是此线程。这是设计使然不可能的。