2011-03-16 61 views
2

ASP.NET網站中的類需要爲每個請求多次訪問數據庫表。數據庫表應該很少改變,如果有的話。也許一個月幾次。ASP.NET:應用程序生命週期,靜態變量

在類的靜態構造函數,該表是從數據庫中取出,並在靜態局部變量緩存。只要類需要訪問表,那麼它只是使用緩存的靜態版本。

我的問題是關於這個緩存的壽命,表的靜態版本。

據我所知,它獲取的第一次類被實例化或使用在類的靜態方法。但是在Web服務器上發生這種情況的頻率如何?如果表格發生變化,我們希望重置表格的這個靜態版本會怎樣?

基本上,我想知道,這是表提取一次,然後僅在每個我重新啓動IIS時重新獲取?什麼,關於站點和IIS,將觸發這個靜態類重置,導致靜態表被重寫?

回答

1

我推薦使用ASP.NET緩存本身,而不是針對每個特定的緩存項變量(一個表的權利,但我敢肯定有增長的空間);這樣,您可以指定到期等,其中包括依賴關係。

您可以獲得有關緩存here的信息,更具體地說,使用緩存here

要回答你的問題有關的生命週期,或局部變量的預期,看到this link,它應該做的解釋,而不是在類的靜態變量比我

1

內臟一個更好的工作,爲什麼不把它添加到'應用程序'集合?它的一生很好理解(網站的生活),並且可以通過觸摸web.config輕鬆回收。將其填充到global.asax的Application_Start方法中。

0

基本上,我想知道,這是 表提取一次,然後只 每個我重新啓動IIS時重新獲取?

是的,你得在那個地方。實質上,重新啓動IIS將導致您的靜態變量被「刷新」。如果你使用一個靜態變量來存儲這種類型的東西(這可能不是最好的解決方案,但我試圖直接回答你的問題而不會被誤解),我建議你在你的數據層中創建一些代碼,這樣你的每次寫入數據庫表時都會更新靜態變量。這意味着每次更新服務器時都不需要反彈服務器。

它也值得記住的是靜態變量在所有客戶端請求共享,這往往會導致有些捉摸不透的多線程錯誤。