我SomeSingleton
在 C# 中有一些课程(如果重要的话 .NET 3.5)和代码:
foo()
{
...
SomeSingleton.Instance.DoSomething();
...
}
我的问题是:Garbage Collector 什么时候会收集这个 Singleton 对象?
ps:SomeSingleton的代码:
private static SomeSingleton s_Instance = null;
public static SomeSingleton Instance
{
get
{
if (s_Instance == null)
{
lock (s_InstanceLock)
{
if (s_Instance == null)
{
s_Instance = new SomeSingleton();
}
}
}
return s_Instance;
}
}
感谢帮助!
编辑(有解释):
在 Windows Service 我有代码:
...
FirstSingleton.Instance.DoSomething();
...
public class FirstSingleton
{
(Instance part the same as in SomeSingleton)
public void DoSomething()
{
SomeSingleton.Instance.DoSomething();
}
}
我想要实现的目标:我不在乎 FirstSingleton 会发生什么,但是 SomeSingleton 会在第一次使用它时启动 Timer,所以我需要 SomeSingleton 存在(这样计时器可以每隔一段时间运行新线程),只要我的服务是跑步。
正如我从您的回答中了解到的那样,所有这些都会发生,因为对我的 FirstSingleton 和 SomeSingleton 的引用是静态的,在服务停止之前,GC 不会收集单例,对吗?:)