单身汉的一生

本文关键字:一生 单身汉 | 更新日期: 2023-09-27 18:25:36

我正在构建一个WCF服务,该服务托管在windows服务。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)

由于您的DataAdapterInstance是静态的,所以在卸载加载的AppDomain之前不会收集它——在大多数情况下,这意味着只有在应用程序关闭后才会收集它。