-2

我有一个持有 WCF 方法代理的 Singleton 对象。从代码中的几个点调用的这个 Singleton 对象包含为 COM 对象。我的问题是:

  1. 是否GC可以决定释放该对象,即使我稍后会使用它(例如在 COM 中)?
  2. 我如何确定何时Dispose()该对象?使用~Finalizer()方法是个好主意吗?或者可能是GC在我用完之前决定最终确定它?
  3. 难道打电话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();
    }
}
4

2 回答 2

0

如果你想停止垃圾收集,你只需要一种方法来保持对对象的引用,最简单和最适合单例的方法就是这样。

public class Singleton
{
    public static Singleton Instance
    {
        get{ return sInstance;}
    }
    public void CallWcfMethod()
    {
        // ....
    }

    private static Singleton sInstance;
}

这样你就不需要将它存储在你的每个类中,只需调用Singleton.Instance.CallWcfMethod();

于 2012-11-20T11:52:08.610 回答
0

如果您的实例被声明为静态,只要 AppDomain 仍然存在,它就不会被收集,此时您很少需要进行任何特定的清理。

于 2012-11-20T11:53:30.990 回答