Asp.net項目因Session阻塞導致頁面開啟速度變慢

來源:互聯網
上載者:User

     前年有個Asp.net項目上線後,正常情況下大部分頁面開啟速度都很快,但個別頁面處理速度較慢。奇怪的是一旦訪問個別速度慢的頁面後,在該頁面還未響應完畢前再去訪問任何其他頁面都需要等待很久才有響應。

     經過仔細分析和尋找,原來發現罪魁禍首是Session阻塞造成的。預設情況下session狀態是“可寫狀態”(EnableSessionState=”true”),即當使用者開啟任何一個頁面時,該頁面的Session就會持有一個寫鎖定,寫鎖定會阻塞所有的讀寫鎖定,故只有等該頁面處理完畢後才釋放對應的Session寫鎖定,在釋放之前訪問其他頁面時將被阻塞住。詳細描述如下:

      當頁面對Session具有可寫功能(即頁面有<%@ Page EnableSessionState="True" %>標記),此時直到請求完成該頁面的Session持有一個寫鎖定。
      當頁面對Session具有唯讀功能(即頁面有<%@ Page EnableSessionState="ReadOnly" %>標記),此時知道請求完成該頁面的Session持有一個讀鎖定。
      讀鎖定將阻塞一個寫鎖定;讀鎖定不會阻塞讀鎖定;寫鎖定將阻塞所有的讀寫鎖定。

 

   所以將各頁面標記為<%@ 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>

  對於個別頁面確實需要寫session許可權的(例如有session[“aa”]=”bb”之類的操作),可以單獨設定該頁面標記為

<%@ Page EnableSessionState="True" %>

 

 

參考資料:

http://www.anqn.com/aspx/2010-04-30/a09126048.shtml
http://www.cnblogs.com/flier/archive/2004/08/07/30902.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.