我正在构建一个 WCF服务,它托管在 Windows服务中。通过使用代理,ASP.Net应用程序调用WCF服务。
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;
}
现在,我遇到了麻烦:(我不确定我写的所有内容是否正确)
我的DataAdapter(包含我的所有数据)什么时候“死”...所以我在这里问的是当对象实际上没有引用时,它的生命周期是什么。 (我会说它会在垃圾收集器运行时收集) - 我认为我的方法不太好,我将不胜感激任何关于如何存储我的数据的建议(首选不使用数据库或外部文件)
感谢您查看我的问题!
答案 0 :(得分:7)
静态引用是GC的“根”引用,因此它们将“永不”死(直到AppDomain被卸载)
答案 1 :(得分:2)
由于DataAdapterInstance
是静态的,因此在加载的AppDomain
被卸载之前不会收集它 - 这在大多数情况下意味着它只会在应用程序关闭后收集。