
文章插圖
最近在寫Webform頁面程序發(fā)現(xiàn)這樣一個現(xiàn)象:在做導(dǎo)出功能時,由于導(dǎo)出數(shù)據(jù)的處理時間比較長,就在客戶端加一個定時器通過ajax不間斷查詢導(dǎo)出進(jìn)度 。然后發(fā)現(xiàn)了一個情況,這個請求一直是阻塞的狀態(tài),直到導(dǎo)出事件處理完成之后 。才去執(zhí)行這個請求,也就是說如果響應(yīng)時間長的請求還在進(jìn)行中,短的請求卻被掛起了 。
百度了下,最終確定是Asp.Net Session造成的 。原文:https://www.cnblogs.com/littlewrong/p/4783104.html
原理:Session實現(xiàn)了Reader/Writer的鎖機制:
當(dāng)頁面對Session具有可寫功能(即頁面有<%@Page EnableSessionState=”True” %>標(biāo)記),此時直到請求完成該頁面的Session持有一個寫鎖定 。
當(dāng)頁面對Session具有只讀功能(即頁面有<%@Page EnableSessionState=”ReadOnly” %>標(biāo)記),此時知道請求完成該頁面的Session持有一個讀鎖定 。
讀鎖定將阻塞一個寫鎖定;讀鎖定不會阻塞讀鎖定;寫鎖定將阻塞所有的讀寫鎖定 。這就是為什么兩個框架中的同一個頁面都去寫同一個Session時,其中一個要等待另一個(稍快的那個)完成后,才開始寫 。
“寫鎖定將阻塞所有的讀寫鎖定”,也就是說頁面在EnableSessionState=”True”的情況下沒返回輸出時,一直持著Session寫操作,其他頁面對Session的讀操作必須等待,而asp.net的aspx頁面默認(rèn)是EnableSessionState=”True”,每個頁面從請求開始至返回一直持著Session寫操作,需驗證頁面必須讀取Session值判斷,這就是為什么需驗證的頁面請求被阻塞的原因 。只要耗時頁面(A頁面)沒有Session的寫操作,也就不會阻塞其他頁面的請求,于是修改A頁面的EnableSessionState=”ReadOnly”,例如:<%@ Page Language=”C#” AutoEventWireup=”true”CodeFile=”TBS_Monitor_List.aspx.cs”EnableSessionState=”ReadOnly” Inherits=”TBS_Monitor_List” %>,問題解決 。
結(jié)論:也就是說,在無需對session進(jìn)行寫操作的頁面,在Page指令加上EnableSessionState=”ReadOnly”屬性,就不會造成Request阻塞的情況了 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- tomcat網(wǎng)頁404錯誤解決 tomcat啟動404錯誤
- mac電池檢測燈不亮解決方案 mac電池檢測燈不亮
- office2007錯誤1935解決辦法 office安裝錯誤1935怎么辦
- office2010提示安裝出錯的解決方法 office2010安裝出錯是怎么回事
- centos安裝圖形界面后無法進(jìn)入解決方案 centos安裝圖形界面后無法進(jìn)入
- win10關(guān)機慢一直轉(zhuǎn)解決方法 win10關(guān)機慢是什么原因
- chrome瀏覽器打不開網(wǎng)頁的解決方法 chrome瀏覽器打不開網(wǎng)頁
- 瀏覽器亂碼解決方法 瀏覽器亂碼怎么辦
- 小米人工智能云平臺 人工智能云平臺解決方案
- 夢見上廁所
