一尘不染

静态成员会收到垃圾吗?

c#

静态成员变量曾经获得垃圾回收吗?

例如,让我们使用以下类。

public class HasStatic {
    private static List<string> shared = new List<string>();

}

并假设它是这样使用的:

//Startup
{
HasStatic a = new HasStatic();
HasStatic b = new HasStatic();
HasStatic c = new HasStatic();
HasStatic d = new HasStatic();
//Something
}
//Other code
//Things deep GC somewhere in here
HasStatic e = new HasStatic();

abc,和d被垃圾回收不静态成员shared得到收集呢?可能e会得到一个新的实例shared


阅读 181

收藏
2020-05-19

共1个答案

一尘不染

不,静态成员与Type关联,Type与它所加载的AppDomain关联。

请注意,不必初始化类的 任何 实例,HasStatic并且shared变量不必具有对的引用List<string>

除非您考虑卸载AppDomain的情况,否则可以将静态变量永远视为GC根。(当然,如果某些值更改了HasStatic.shared引用其他实例的值,则第一个实例
可能有 资格进行垃圾回收。)

2020-05-19