2

次のシナリオを考慮してください。

  1. ASP .NET MVC 3 フレームワークを使用して、完全な Web アプリケーションを作成しました。現在、私のアプリケーションは Web サーバーによって管理されています。
  2. アプリケーションのサーバー側で HTTP 要求が受信されます。
  3. シングルトン デザイン パターンを実装するクラスは、サーバー側でインスタンス化されます。
  4. ブラウザに応答が送信されます。
  5. アプリケーションのサーバー側で別の HTTP 要求が受信されます。ステップ 2 で使用したシングルトン インスタンスは、サーバー側で引き続き使用できますか?

このページで ASP .NET アプリケーションのライフ サイクルに関する情報を読みました: http://msdn.microsoft.com/en-us/library/ms178473.aspx

しかし、私はまだ私の質問に答えることができません。

今後ともよろしくお願いいたします


VS2010でいくつかのテストを行いました。

私のプロジェクトの主なコンポーネントのリストは次のとおりです。

  • Index HttpGet アクション メソッドを含むホーム コントローラー。
  • Index アクション メソッドの結果のビュー。
  • シングルトン デザイン パターンを実装する SingletonTest クラス。

SingletonTest クラスのコードは次のとおりです。

public class SingletonTest
{
    private int counter;
    private static SingletonTest instance = null;

    public int Counter
    {
        get
        {
            return counter;
        }
    }

    public static SingletonTest Instance 
    {
        get 
        {
            if (instance == null)
                instance = new SingletonTest();

            return instance;
        }
    }

    private SingletonTest() 
    {
        counter = 0;
    }

    public void IncrementCounter()
    {
        counter++;
    }
}

Index アクション メソッドのコードは次のとおりです。

public ActionResult Index()
{
    SingletonTest st = SingletonTest.Instance;
    st.IncrementCounter();

    return View();
}

ビューのコードは次のとおりです。

@SingletonTest.Instance.Counter

ここで私が従ったテストシナリオ:

  1. IIS サーバーは、VS2010 によって自動的に起動されています。
  2. /Home/Index/ URL をリクエストしたところ、値 1 が表示されました。
  3. /Home/Index/ URL をリクエストしたところ、値 2 が表示されました。
  4. ...

このテストは、ステップ 1 で作成された SingletonTest インスタンスが、次の要求を処理するときに使用できることを示しています。サーバー上の Web アプリケーションにメモリ空間が割り当てられていると思います。

次に、IIS サーバーを停止し、テスト シナリオを再び実行しました。以前と同じ結果が得られました:1、2、....

4

2 に答える 2

0

シングルトンは複数のリクエストにまたがって存続する可能性がありますが、2 回目のテストの理由から正確に注意する必要があります。IIS が再起動されるか、アプリケーション プールがリサイクルされると、すべてが失われます。

本当にシングルトン インスタンスが必要ですか?

すべてのリクエストで何らかの状態を維持したい場合は、データベースなどの外部ストレージを使用することをお勧めします。

于 2012-01-11T17:07:42.067 に答える
0

同時要求を処理するために IIS が作成する同じアプリケーションの複数インスタンスについてはどうですか?

トラフィックの多い状況でIISが同じアプリケーションの複数のインスタンスを作成すると、シングルトンオブジェクトは同じではないと思います

于 2013-02-05T01:02:42.993 に答える