10

従業員ページに がありResponse.Redirectます。給与ページにリダイレクトされます。

Response.Redirect ("Salary.aspx");

以下のように例外処理を追加するまでは正常に機能していました。

try
{
   Response.Redirect ("Salary.aspx");
}
catch(Exception ex)
{
//MyLog();
    throw new Exception();
}

//Remaining code in event handler

endResponseこれにより、「スレッドが中止されました」という新しい例外が発生しました。これは、リダイレクトを false に設定することで回避できることがわかりました。

Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

新しい例外の説明: 常に例外をスローしますが、フレームワークによって処理されます。try..catch を追加したので、そこでキャッチされました (そして、新しい例外をスローしています)

注: CompleteRequestHTTP フィルターとモジュールをさらにバイパスしますが、現在のページ ライフサイクルのイベントをさらにバイパスしません。

注: Response.Redirect は、この例外をスローして、現在のページの処理を終了します。ASP .Net 自体がこの例外をResetAbort処理し、処理を続行するように呼び出します。

質問

  1. 例外がスローされないため、「endResponse を false に設定する」ことでパフォーマンスが向上するかどうか。
  2. ページのライフサイクル イベントが終了しないため、「endResponse を false に設定」するとパフォーマンスが低下する可能性がありますか?

落とし穴

  1. endResponse をfalseに設定すると、イベント ハンドラ内の残りのコードが実行されます。したがって、残りのコードをチェックする必要がありifます (チェック: リダイレクト基準が満たされていないかどうか)。

参照

  1. Response.Redirect が System.Threading.ThreadAbortException を引き起こすのはなぜですか?
  2. ASP.NET 例外「スレッドが中止されました」により、メソッドが終了します
4

1 に答える 1

12

応答 (Response.Redirect(url)またはResponse.Redirect(url, true))を終了しても、 よりも優れたパフォーマンスは得られませんResponse.Redirect(url, false)。を使用falseすると、コードの実行を制御できるため、ユーザーをリダイレクトする場合に、それ以上コードを実行することはできません。

これは、次のMSDN エントリで指定されていResponse.Redirect()ます。

endResponse パラメーターに true を指定すると、このメソッドは元の要求の End メソッドを呼び出し、完了時に ThreadAbortException 例外をスローします。この例外は、Web アプリケーションのパフォーマンスに悪影響を及ぼすため、endResponse パラメーターに false を渡すことをお勧めします。

ご指摘のとおり、ページのライフサイクル イベントについて考慮する必要があります。ユーザーをリダイレクトする場合は、ページ イベントの実行を続行しないでください (パフォーマンスのためだけでなく)。私は最近、不十分なコーディング/計画を実行しないとどうなるを示す簡単な例を書きました。

その投稿Response.Redirect()の要点は、ブラウザに 302 を返すことです。ページの実行が継続されるため、使用時に問題が発生する可能性があり、ユーザーは 302 を無視しResponse.Redirect(url, false)、代わりにレンダリングされたページを表示することを選択できるため、問題が発生しないようにするための措置を講じる必要があります。見られたくないものは何でも見てください。これをテストするには、FirefoxのNoRedirectアドオンが役立ちます。

最高のパフォーマンスを得るには:パラメーターとして使用"false"し、endResponseそれ以上コードを実行していないことを確認し、ユーザーが 302 を無視した場合にユーザーに見せたくない情報をページがレンダリングしないようにします。

于 2012-12-05T16:26:00.817 に答える