3

このコードを書くと

  protected void Page_Load(object sender, EventArgs e)
    {
        Page_Load(sender, e);
    }

エラーが発生します(無限の再帰):

ここに画像の説明を入力してください

w3wp.exeプロセスはから終了しますtask manager

罰金...

しかし、私がそうする場合:

throw new ApplicationException(); //or SystemException();

通常の例外ページにのみ表示されます。(w3wp.exeはまだ稼働しています)。

質問:

  • w3wp.exeをシャットダウンさせるのはどのような例外ですか?
  • アプリケーションプールをシャットダウンする原因となる例外の種類は何ですか?

ps 今書いたものに応じて、次のシナリオを考えてください:Webページを作成し、サイトのファームでサイトをホストし、再帰を作成することでw3wp.exeプロセス全体を終了できます.....(他の人も問題を抱えています)...

私の質問に答えてくれませんか?

ありがとう。

4

3 に答える 3

1

これはおそらく有名なStackoverflowException. メソッドを何度も呼び出しているため、無限ループが原因ですPage_Load

MSDN から:

以前のバージョンの .NET Framework では、アプリケーションが StackOverflowException オブジェクトをキャッチする可能性がありました (たとえば、無制限の再帰から回復するため)。ただし、スタック オーバーフローの例外を確実にキャッチしてプログラムの実行を続行するには、かなりの追加コードが必要になるため、現在のところ、この方法はお勧めできません。

.NET Framework バージョン 2.0 以降では、StackOverflowException オブジェクトを try-catch ブロックでキャッチできず、対応するプロセスが既定で終了します。したがって、スタック オーバーフローを検出して防止するコードを記述することをお勧めします。たとえば、アプリケーションが再帰に依存している場合は、カウンターまたは状態条件を使用して再帰ループを終了します。共通言語ランタイム (CLR) をホストするアプリケーションは、CLR がスタック オーバーフロー例外が発生したアプリケーション ドメインをアンロードし、対応するプロセスを続行できるように指定できることに注意してください。詳細については、「ICLRPolicyManager インターフェイスとホスティングの概要」を参照してください。

この答えを見たいと思うかもしれません:

https://stackoverflow.com/a/4802309/284240

于 2012-04-17T13:09:44.663 に答える
0

例外の理由は、メモリ オーバーフローです。アプリケーションがこれを引き起こす方法はたくさんありますが、特定のシナリオを推測する意味はありません。私は、優れたホスティング プロバイダーは、不正な動作をするアプリケーションから保護する必要があると考えています。

于 2012-04-17T13:14:01.253 に答える
-3

利用可能なすべての回答に追加します。サーバー内のすべての Web サイトが個別の AppDomain で実行されるため、プロセス全体をダウンさせることはできません。したがって、あなたのコードが誤った動作をした場合、あなたのアプリドメインのみが殺されます。

于 2012-04-17T13:17:15.057 に答える