Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 独生子女的一生_C#_Asp.net_Service_Singleton - Fatal编程技术网

C# 独生子女的一生

C# 独生子女的一生,c#,asp.net,service,singleton,C#,Asp.net,Service,Singleton,我正在构建一个WCF服务,它托管在windows服务中。ASP.Net应用程序使用代理调用WCF服务 using (WcfServiceRef.MonitorClient proxy = new WcfServiceRef.MonitorClient()) { //WCF Service proxy proxy.Open(); proxy.DoSomething(); } 此外,我还有一个单例类DataAdapter,它在WCF服务中使用,如下所示(大多数情况下,它只是

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

using (WcfServiceRef.MonitorClient proxy = new WcfServiceRef.MonitorClient())
{
    //WCF Service proxy
    proxy.Open();
    proxy.DoSomething();
}
此外,我还有一个单例类DataAdapter,它在WCF服务中使用,如下所示(大多数情况下,它只是将调用转发给DataAdapter,以便能够轻松更改实际数据访问的实现):

我的DataAdapter如下所示,并保存我的数据,这些数据应保持活动状态:

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

    internal static ServiceAdapter GetInstance()
    {
        if (DataAdapterInstance == null)
        {
            DataAdapterInstance = new DataAdapter();
        }
        return DataAdapterInstance;
    }
公共静态DataAdapter DataAdapterInstance;
私有列表数据;
内部静态ServiceAdapter GetInstance()
{
如果(DataAdapterInstance==null)
{
DataAdapterInstance=新的DataAdapter();
}
返回数据适配器状态;
}
现在我有麻烦了:(我不确定我在这里写的每件事是否都是正确的)

  • windows服务在理论上永远(应该)运行
  • WCF服务仅在由我的代理(从)调用/创建时运行 (asp.net)
我的DataAdapter(包含我所有的数据)什么时候“死亡”。。。所以我想问的是,当一个对象实际上没有引用时,它的生存期是多少。(我会说它在垃圾收集器运行时被收集) -我认为我的方法不太好,如果您对如何存储我的数据有任何建议,我将不胜感激(最好不要使用DB或外部文件)


谢谢你调查我的问题

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

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

谢谢!“从不”听起来不错:P但“卸载appDomain”是什么意思?在我的场景中,当托管windows服务停止时,是否存在这种情况?.NET中的应用程序由AppDomains“组成”。通常它只是一个AppDomain,除非您显式创建更多。任何[托管]代码都在AppDomain中执行。如果您没有对AppDomains执行任何操作,那么您只有一个AppDomains,一旦应用程序停止,它将被卸载。在这个场景中,所有静态变量都是“活动”的,直到结束。所谓停止,是否意味着当应用程序被手动停止并重新启动(回收)或操作系统关闭等?应用程序不会因为不活动而停止和启动吗?
public static DataAdapter DataAdapterInstance;
    private List<CustomObjects> myData;

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