首页 > 解决方案 > 在 C# 中使用花括号释放内存

问题描述

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

标签: c#optimization

解决方案


简而言之:不。你不能强制垃圾收集器处理这个分配的!类!立即处置。

In Long:你可能是。您可以简单地将变量设置为Null并调用GC.Collect(). 这将调用正常的 GC 集合,并且可以在其集合中包含以前未引用的类,但没有保证会发生这种情况。但这将为您的整个应用程序调用 GarbageCollector,而不仅仅是这个线程。这在设计上是不可能的。


推荐阅读