gpt4 book ai didi

c# - .NET 中 GC 如何收集静态成员中的资源?

转载 作者:行者123 更新时间:2023-11-30 15:48:29 26 4
gpt4 key购买 nike

我有一段代码是这样的:

Class Program
{
static StreamReader sr = null;
static int var=0;
static Program()
{
sr = new StreamReader("input.txt")
}

~Program()
{
sr.Dispose();
}

static void main(string args[])
{
//do something with input here
}
}

这可能不是一个好的做法,但我只是想用这个例子来问一下解构器和GC是如何工作的。

我的问题是:~Program() 会在不确定的时间被调用,还是在这种情况下根本不会被调用。如果解构器不会被调用,那么 GC 如何收集非托管资源和托管资源。

最佳答案

在卸载 AppDomain 或进程之前,它可能不会回收这些资源。

如果你从不实例化一个对象,它就永远不会被销毁。这正是您想要的原因,可能类似于 Singleton。我相信有一种叫做“Phoenix Singleton”的风格,它允许清理 Singleton,然后在再次需要时重建。您可以对单例对象使用 WeakReference 来实现它。

无论如何,对于一个运行有限时间的简单程序,我不会担心它,除非它成为一个问题......当进程退出时资源将被清理。

关于c# - .NET 中 GC 如何收集静态成员中的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com