单身人士的一生

时间:2012-02-24 13:27:29

标签: c# asp.net service singleton

我正在构建一个 WCF服务,它托管在 Windows服务中。通过使用代理,ASP.Net应用程序调用WCF服务。

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-service仅在我的代理人调用/创建时运行(来自 asp.net)

我的DataAdapter(包含我的所有数据)什么时候“死”...所以我在这里问的是当对象实际上没有引用时,它的生命周期是什么。 (我会说它会在垃圾收集器运行时收集)   - 我认为我的方法不太好,我将不胜感激任何关于如何存储我的数据的建议(首选不使用数据库或外部文件)

感谢您查看我的问题!

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

由于DataAdapterInstance是静态的,因此在加载的AppDomain被卸载之前不会收集它 - 这在大多数情况下意味着它只会在应用程序关闭后收集。