我有一个Singleton对象,它持有WCF方法的代理。从代码中的几个点调用的Singleton对象包括COM对象。 我的问题是:
GC
是否可以决定释放该对象,即使我稍后会使用它(例如在COM中)?Dispose()
此对象?使用~Finalizer()
方法是个好主意?或者可能是GC
决定在我使用它之前完成它?GC.KeepAlive(this)
可以解决问题吗?谢谢!
编辑:
public class Singleton
{
private static Singleton instance = null;
public static Singleton GetInstance()
{
if (instance == null)
{
lock (syncObject)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
public void CallWcfMethod()
{
// ....
}
}
public class Class1
{
Singleton instance = Singleton.GetInstance();
public void CallWcfMethod()
{
instance.CallWcfMethod();
}
}
[ComVisible(true)]
public class Class2
{
Singleton instance = Singleton.GetInstance();
public void CallWcfMethod()
{
instance.CallWcfMethod();
}
}
答案 0 :(得分:0)
如果你想停止垃圾收集,你只需要一种方法来保持对象的引用,最简单的,最适合单身的是这个。
public class Singleton
{
public static Singleton Instance
{
get{ return sInstance;}
}
public void CallWcfMethod()
{
// ....
}
private static Singleton sInstance;
}
这样你就不需要将它存储在你的每个类中,只需调用Singleton.Instance.CallWcfMethod();
答案 1 :(得分:0)
如果您的实例被声明为静态,只要AppDomain仍然存在,就不会收集它,此时您很少需要进行任何特定的清理。