c# - 垃圾收集器什么时候收集单例?

标签 c# .net garbage-collection singleton

<分区>

我在 C# 中有一些 SomeSingleton 类(如果重要的话是 .NET 3.5)和代码:

foo()
{
    ...
    SomeSingleton.Instance.DoSomething();
    ...
}

我的问题是:垃圾收集器什么时候收集这个 Singleton 对象?

p.s: 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;
        }
    }

感谢您的帮助!

编辑(附解释):

在 Widnows 服务中我有代码:

   ...
   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 不会收集单例,对吗? :)

最佳答案

这个问题可以用这个来回答:Do static members ever get garbage collected?

基本上,当包含的 AppDomain 被销毁时,实例将被销毁。

关于c# - 垃圾收集器什么时候收集单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18313982/

相关文章:

c# - DependencyProperty Silverlight 用户控件

c# - 如何找到映射到属性路由的 Controller /操作?

.net - Entity Framework 性能问题

.net - ConfigurationManager.AppSettings 为空?

c# - SqlDataReader 和元数据的内部工作

C# Enumerable.Take 带默认值

java - 对象变为空

node.js - --expose-gc 是否会阻止垃圾收集器自动执行?

.net - 我对 dumpheap 和 gcroot 的理解不正确吗

C# 不可变整数