2014-07-03 63 views
0

我在一個使用ASP會話狀態來保存狀態信息的傳統ASP網站上工作。我們使用sql數據庫實現ASP會話狀態。ASP會話狀態概述

我們遇到了問題,會話被鎖定,隨後對該會話的請求堆積成影響我們性能的大隊列。我不指望你能爲我解決這個問題,但也許有人可以給我一個會話狀態的概述,因爲我不認爲我完全理解它。

  • 我們沒有頁面被標記爲只讀,因此我們對會話數據庫的所有請求都是獨佔的(TempGetStateItemExclusive3);這反過來會對會話鎖定。
  • 據我所知,如果修改了會話,我們更新了數據庫中的會話(TempUpdateStateItemShort),並且該進程的一部分刪除了鎖定。
  • 我也明白,如果我們放棄一個會話,鎖定被刪除(TempRemoveStateItem)。
  • 我也明白,SQL代理作業定期發生刪除過期的會話。

我不明白的是我們如何放棄一個會話,或者我們如何在通過Get鎖定而不更新的會話上釋放鎖定?

我已閱讀以下內容,在我的理解遠遠得到這個http://msdn.microsoft.com/en-gb/library/aa478952.aspxhttp://msdn.microsoft.com/en-us/library/aa479041.aspx

一如往常的任何幫助將受到歡迎和讚賞。

+0

asp.net or classic asp? – ulluoink

+0

對不起ASP.Net – Steve

回答

0

我花了一些時間來研究這一點,我想我已經想通了。

  • 放棄會話是一個明確的行動,Session.Abandon()

  • 釋放鎖是一種含蓄的行動

在Page_Load事件TempGetStateExclusive3呼叫到由獲取會話對象。退出page_load隱式調用TempReleasStateItemExclusive。作爲一名開發人員,您只能控制放棄會話,鎖定由框架爲您處理。

這不能解決我的問題,因爲會話被鎖定。但至少現在我知道sql server會話狀態應該如何工作。

謝謝