2009-05-12 80 views
3

an article建議將ASP.NET應用程序狀態存儲在HttpApplication類(在Global.asax.cs中)的靜態成員中。ASP.NET中的靜態變量

如何在其他類的靜態成員中存儲應用程序狀態

我試過這樣做,似乎有幾個這些變量的實例可以存在(每個AppDomain的單個實例?)。這是否屬實,我們應該只使用應用程序類的靜態字段?或者沒關係?

回答

3

它在許多情況下工作得很好,比Application好(例如它是強類型的)。只要確保你知道線程和鎖定問題。

作爲一種個人體驗,我設法緩存了幾個網站中的static類中ASP.NET應用程序的配置信息。

1

這是真的,我們應該總是隻使用應用程序類的靜態字段?

是的。用戶特定的數據(會話數據)不應該在這裏。

您網站的所有用戶都在同一個應用程序實例中,因此將共享相同的靜態變量。例如,它絕對不是會議的好替代品。

+0

我遇到了我從另一個開發人員繼承的代碼。客戶正試圖弄清楚爲什麼小規模的多用戶測試不能保持奇怪的數據。當我看到代碼並解釋了問題時,結果是一個集體* headlap!*相當簡單的修復,現在我們終身擁有一個客戶端。 :) – 2009-05-12 19:53:49

3

如果您在web應用程序中執行的任何操作都不僅僅是從中讀取,您可能會遇到帶有靜態變量的大問題。 Asp.net是一個多線程環境。應用程序集合在Get或帶鎖的Set期間會爲您鎖定。如果你使用靜態變量,那麼就沒有鎖定。

我建議使用web.config將所有隻讀變量存儲在它自己的部分中。