1

初期ロード後に HTML をページに返すために使用される WebMethod があります。このメソッドは、jQuery の ajax メソッドを通じて呼び出されます。

すべてが機能しますが、これらの呼び出しから要求状態をロードする際に、かなり深刻なパフォーマンスの問題があります。大量のトラフィックがあると、CPU 使用率が最大になり、実際にはサイト全体の応答性が低下します。

1 つのプロファイラーを使用すると、System.Web.Handlers.ScriptModule.OnPostAcquireRequestState()が、呼び出しの継続時間のほぼ 100% で原因として呼び出されます。

別のプロファイラーはSystem.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) を呼び出します

そのため、負荷テストを使用してローカルで動作を再現できますが、ライブラリに原因があるため、対処方法について途方に暮れています。コンテキストを回復するのに費用がかかる原因となる可能性のある「落とし穴」はありますか? WebMethod からコンテキストを単純に削除できますか?

4

1 に答える 1

2

問題は、Page クラス内に WebMethod があることが判明しました。これにより、WebMethod は、Session オブジェクトに対するリーダー/ライター ロックを持つ Session State で読み込まれるようになりました。これにより、要求が同期的に実行され、ロックが開くのを待つ要求がキューに入れられました。

ページ内の WebMethod がセッションをロードしないようにすることも、読み取り専用としてロードすることもできませんでした。WebMethod を独自の WebService に移動すると、これが可能になり、問題が解決しました。

これにより、WebMethod に入る際の CPU の「ロックアップ」が解決され、メソッドを同時に実行できるようになり、ページの読み込み時間が大幅に短縮されました。

于 2013-04-19T12:40:18.600 に答える