单身人士的一生

r3t*_*try 5 c# asp.net service singleton

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

using (WcfServiceRef.MonitorClient proxy = new WcfServiceRef.MonitorClient())
{
    //WCF Service proxy
    proxy.Open();
    proxy.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

此外,我有一个Singleton类DataAdapter,在这样的WCF服务中使用(大多数时候它只是将调用转发到DataAdapter,以便能够轻松地更改实际数据访问的实现):

DataAdapter.GetInstance().DoSomething();
Run Code Online (Sandbox Code Playgroud)

我的DataAdapter看起来像这样,并保存myData,它应该保持活着:

public static DataAdapter DataAdapterInstance;
    private List<CustomObjects> myData;

    internal static ServiceAdapter GetInstance()
    {
        if (DataAdapterInstance == null)
        {
            DataAdapterInstance = new DataAdapter();
        }
        return DataAdapterInstance;
    }
Run Code Online (Sandbox Code Playgroud)

现在,我遇到了麻烦:(我不确定我写的所有内容是否正确)

  • Windows服务'理论上永远运行(应该如此)
  • WCF服务仅在我的代理(从asp.net)调用/创建时运行

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

感谢您关注我的问题!

Ale*_*aga 7

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

  • .NET中的应用程序"包含"AppDomains.通常它只是一个AppDomain,除非您明确创建更多.任何[托管]代码都在AppDomain中执行.如果您没有对AppDomains执行任何操作,那么您只有一个,并且一旦您的应用程序停止,它将被卸载.在这种情况下,所有静态变量都"活着"直到结束. (2认同)