2009-06-14 94 views
1

我試圖緩存一些我從數據庫中檢索到的信息。我決定使用靜態列表<>成員來存儲信息。根據我的經驗,我知道在多線程應用程序中使用List <>我需要使用鎖定語句來保護對它的訪問。我是否以完全相同的方式對待我的Asp.Net代碼中的任何代碼?鎖定聲明仍然有效嗎?ASP.Net靜態對象

回答

2

鎖將工作。請注意,如果有多個工作進程,則最終會有多個版本的列表。他們每個人都將受到自己的鎖保護。

這裏的一個非常實際的危險是,如果您未能釋放鎖定,您的整個Web應用程序可能會掛起。在您的ASP.NET頁面正在執行時,用戶可能會斷開連接;所以要小心在意外時間拋出的異常。

+0

這可能嗎?我的印象是lock(){}保證鎖將被釋放。另外,你是否知道或者至少知道我在哪裏可以找出多久ASP.Net會爲請求創建一個新線程而不是一個全新的過程? – 2009-06-14 18:40:55

+0

同意鎖(){}將保證鎖釋放。您可以在「最大工作進程」下的「應用程序池」設置中配置IIS中的進程數。默認值是1,這意味着只有一個進程。 – Andomar 2009-06-14 18:43:34

5

圍繞List方法的鎖定語句肯定會起作用,但如果您需要ASP.NET應用程序中的緩存功能,我會建議您使用適用於此功能的Cache類。