c# - 在 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
/...
}
解决方案
简而言之:不。你不能强制垃圾收集器处理这个分配的!类!立即处置。
In Long:你可能是。您可以简单地将变量设置为Null
并调用GC.Collect()
. 这将调用正常的 GC 集合,并且可以在其集合中包含以前未引用的类,但没有保证会发生这种情况。但这将为您的整个应用程序调用 GarbageCollector,而不仅仅是这个线程。这在设计上是不可能的。
推荐阅读
- powershell - Powershell cmdlet 忽略数组参数
- popup - 当弹出窗口查看另一个弹出窗口时,ngx-bootstrap BsModalRef.hide() 方法不起作用,也不会隐藏第二个弹出窗口
- python - tkinter:将按钮堆叠在彼此之上
- docker - Docker-compose 没有公开/映射端口,但是 docker run 工作正常
- xml - 如果 xml 节点为空,则在 Word 加载项中的自定义 xml 属性上设置文本值失败
- jenkins - Jenkins中的冲突方法名称
- javascript - 如何使用 React Native 在一行中创建两个具有不同对齐方式的文本标签?
- python - 运行 pip install 时出现 UnicodeDecodeError
- java - 如何获得显示尺寸而不是屏幕尺寸?
- bash - 使用带有条件的选项标志(shell 脚本)