14

AcquireRequestState でかなりの時間を要するかなりの数の ajax 呼び出しを検出しました。旅行中に ASP.Net のセッション ロック gem に出くわしたため、カスタム セッション状態ハンドラーを実装しました (以下のリンクに基づく)。

変更を加えてデプロイした後、AcquireRequestState で非常に急激な低下が見られましたが、PreExecuteRequestHandler に置き換えられていました。

今朝、突然、OWIN を含めたことに気づきました。これが、おそらく PreExecuteRequestHandler が非常に多くの時間を費やしている理由でした。次に、それを削除し、コードをデプロイした瞬間、PreExecuteRequestHandler がリストから消えました。悲しいことに、これはほぼ同じコストで再び AcquireRequestState に置き換えられました。

部分ビューを返す AJAX 呼び出し、プリミティブ型または JSON オブジェクトを返す AJAX 呼び出しは、スループットが高いにもかかわらず、ほとんど影響を受けていないようです。

したがって、これにより、私が完全に困惑している3つの質問が残り、1つの答えが他の2つの答えにつながると思います.

1) OWIN のインストール時にコストが AcquireRequestState から PreExecuteEventHandler に移動したのはなぜですか? OWIN で IRequireSessionState としてマークされているものはありますか? (AcquireRequestState はマネージ パイプラインの早い段階で発生する必要があったことを理解しています)

2) AcquireRequestState 内で実際に何が起こっているかについて、より多くの情報を取得するにはどうすればよいでしょうか? それとも、JSON オブジェクトを返し、それを使用して UI に必要なものをレンダリングすることに時間を費やしたほうがよいのでしょうか?

3) New Relic で /{controller}/{action}/{id} にマップされ、上記のリクエストの実行中に完全にスタックするリクエストがいくつか (ごく少数ですが) 見られます。これは、プロジェクト内にあるコントローラーとアクションにのみルーティングするようにルーティングに制約を設定しているにもかかわらずです。

PS: これは次のように見えますが、New Relic でも見られます: AcquireRequestState の長い遅延

からのカスタム セッション モジュール: すべての ASP.Net Web サイトが遅い理由を発見しました。

4

2 に答える 2

2

上記で最終的に直面したセッションの問題を除外しようとしているが、まだセッション値に依存する必要がある (したがって、コントローラー レベルでセッションを無効にすることはできない) 人は、次のセッション状態プロバイダーを見てください。

https://github.com/aspnet/AspNetSessionState

特に、次のアプリケーション設定に注意してください。

<add key="aspnet:AllowConcurrentRequestsPerSession" value="[bool]"/>

.Net Framework 4.6.2 にアップグレードする必要がありますが、私たちの場合は少額です。

于 2019-03-25T05:38:57.513 に答える