-2

WCF メソッドへのプロキシを保持するシングルトン オブジェクトがあります。コード内のいくつかのポイントから呼び出されるこの 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

インスタンスが静的として宣言されている場合、AppDomain がまだ生きている限り収集されません。その時点で特定のクリーンアップを行う必要はほとんどありません。

于 2012-11-20T11:53:30.990 に答える
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 に答える