C# 独生子女的一生
我正在构建一个WCF服务,它托管在windows服务中。ASP.Net应用程序使用代理调用WCF服务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服务中使用,如下所示(大多数情况下,它只是
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)
谢谢你调查我的问题 因为您的
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;
}