ページの開き速度が遅くなる--セッションがブロックされた場合の解決策
2377 ワード
Asp.Netプロジェクトはセッションブロックのためページの開き速度が遅くなります
一昨年Aspがありました.Netプロジェクトがオンラインになった後、通常はほとんどのページが開く速度が速いが、個別のページの処理速度は遅い.不思議なことに、個別の速度の遅いページにアクセスした後、そのページが応答していない前に他のページにアクセスするには、応答があるまで待つ必要があります.
綿密な分析と検索を経て、元凶はSessionの閉塞によるものであることが分かった.デフォルトではセッション状態は「書き込み可能状態」(EnableSessionState="true」)です.つまり、ユーザーが任意のページを開くと、そのページのセッションは書き込みロックを保持し、書き込みロックはすべての読み書きロックをブロックするため、そのページの処理が完了してから対応するセッション書き込みロックが解放され、解放前に他のページにアクセスするとブロックされます.詳細は次のとおりです.
ページがSessionに対して書き込み可能な機能(すなわち、ページに<%@Page EnableSessionState="True"%>タグがある)を持っている場合、ページの完了を要求するSessionが書き込みロックを持つまで.ページがセッションに対して読み取り専用の機能(すなわち、ページに<%@Page EnableSessionState="ReadOnly"%>タグがある)を持っている場合、そのページの完了を要求するセッションには読み取りロックがあることがわかります.読み取りロックは書き込みロックをブロックします.リードロックはリードロックをブロックしません.書き込みロックは、すべての読み書きロックをブロックします.
したがって、各ページに<%@Page EnableSessionState="ReadOnly"%>とマークすると、この問題を解決できます.Webでもいいです.configで各ページのデフォルトsession状態を統一的に変更します. <pages validateRequest="false" enableSessionState="ReadOnly">
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
個々のページにセッション権限を書く必要がある場合(たとえば、セッション[「aa」=「bb」などの操作がある場合)は、ページタグを個別に設定して
<%@ Page EnableSessionState="True"%>
参考資料:
http://www.cnblogs.com/flier/archive/2004/08/07/30902.html
<pages validateRequest="false" enableSessionState="ReadOnly">
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>