1

MvcApplicationはMVC3Webアプリケーションのシングルトンですか?なぜ3つのインスタンスを見つけたのですか?

私の手順:(VS2010 SP1 + ASP.NET MVC 3ツールの更新)

  1. デフォルトのインターネットMVC3アプリケーションを作成します(アカウントサンプルを使用)
  2. global.asaxにMvcApplication()コンストラクターを追加し、ブレークポイントを設定します
  3. F5キーを押してデバッグします

コンストラクターが3回呼び出されたことがわかりました!

よろしくお願いします、

Zach @ Shine

===編集===

修正:

1つのWebアプリで3つではなく、2つのインスタンスが見つかりました。注意深くチェックしたところ、ソリューションに2つのWebアプリが含まれていることがわかりました。そのうちの1つを削除すると、左側のアプリのインスタンスが2つ見つかります。

これがログです(番号はMvcApplicationインスタンスのハッシュコードです)

MvcApplication(): 41516761
Application_Start(): 41516761
 MvcApplication(): 56552081
 Application_AuthenticateRequest(): 56552081
 Application_AuthenticateRequest(): 56552081
 Application_AuthenticateRequest(): 56552081
 MvcApplication_Disposed(): 56552081
Application_End(): 41516761

示されているように、一方のインスタンスは開始イベントと終了イベントの処理に使用され、もう一方のインスタンスは要求の処理に使用されます。

4

1 に答える 1

1

MvcApplicationは、以下の通常のasp.netからHttpApplicationを継承します。これは、asp.netパイプラインを理解するための優れたリンクです。記事から関連するセクションをコピーしました。

つまり、MvcApplicationはシングルトンではありませんが、各リクエストには1つしか存在しません。

http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp

各リクエストはHttpApplicationオブジェクトにルーティングされます。HttpApplicationFactoryクラスは、アプリケーションの負荷に応じてASP.NETアプリケーションのHttpApplicationオブジェクトのプールを作成し、各着信要求の参照を渡します。プールのサイズは、machine.configのProcessModelキーのMaxWorkerThreads設定の設定に制限されています。デフォルトは20です。ただし、プールは小さい数で始まります。通常は1つであり、複数の同時リクエストを処理する必要があるため、大きくなります。プールは監視されているため、負荷がかかるとインスタンスの最大数まで増加する可能性があります。その後、負荷が低下すると、プールはより少ない数に縮小されます。HttpApplicationは、特定のWebアプリケーションの外部コンテナーであり、Global.asaxで定義されているクラスにマップされます。これは、アプリケーションで実際に定期的に表示されるHTTPランタイムへの最初のエントリポイントです。Global.asax(またはクラスの背後にあるコード)を見ると、このクラスはHttpApplicationから直接派生していることがわかります。

于 2012-04-21T02:50:27.870 に答える