在C#中使用花括号释放内存

时间:2019-03-17 13:56:35

标签: c# optimization

我想知道使用大括号在方法调用中定义范围是否会“强制”或将信息提供给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
  /...
}

1 个答案:

答案 0 :(得分:1)

简而言之:不,您不能强迫垃圾收集器处置此分配的!class!立即处置。

长:您可能会。您只需将变量设置为Null并调用GC.Collect()。这将调用普通的GC集合,并且可以在其集合中包括以前的未引用类,但是不会发生Garantie的情况。但这将为您的整个应用程序调用GarbageCollector,而不仅仅是此线程。这是设计使然不可能的。