单身汉的一生
本文关键字:一生 单身汉 | 更新日期: 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
之前不会收集它——在大多数情况下,这意味着只有在应用程序关闭后才会收集它。