我正在构建 Windows服务中托管的 WCF服务。 WCF服务由ASP.Net应用程序通过使用代理来调用。

using (WcfServiceRef.MonitorClient proxy = new WcfServiceRef.MonitorClient())
{
    //WCF Service proxy
    proxy.Open();
    proxy.DoSomething();
}

此外,我还有一个Singleton类 DataAdapter ,该类在WCF服务中使用,如下所示(大多数情况下,它只是简单地将调用转发到DataAdapter,以便能够轻松更改实际数据访问的实现):
DataAdapter.GetInstance().DoSomething();

我的DataAdapter看起来像这样,并保存应保持事件状态的myData:
public static DataAdapter DataAdapterInstance;
    private List<CustomObjects> myData;

    internal static ServiceAdapter GetInstance()
    {
        if (DataAdapterInstance == null)
        {
            DataAdapterInstance = new DataAdapter();
        }
        return DataAdapterInstance;
    }

现在出现了我遇到的麻烦:(我不确定在这里写的所有内容是否正确)
  • Windows服务在理论上永远运行(应该如此)
  • WCF服务仅在由我的代理调用/创建时运行(从
    asp.net)

  • 我的DataAdapter(其中包含我的所有数据)什么时候“死”……所以我要问的是,当实际上没有引用时,对象的生存期是多少。 (我会说每当垃圾收集器运行时就收集它)
    -我认为我的方法不太好,我将不胜感激有关如何存储数据的任何建议(最好不使用数据库或外部文件)

    感谢您调查我的问题!

    最佳答案

    静态引用是GC的“根”引用,因此它们将“永不”死亡(直到AppDomain卸载)

    关于c# - 单例的一生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9431541/

    10-13 09:15