簡體   English   中英

在ASP.NET中使用靜態列表與靜態變量

[英]Using static lists vs static variables in ASP.NET

//ASP.NET.. Using GridListCache as global variable for single user
public static List<GridItems> GridListCache = new List<GridItems>();

在ASP.NET中,我使用全局靜態列表來跟蹤網格項目。

該列表將仍然是特定於每個用戶的列表,還是處於AppPool級別並在所有用戶之間共享的列表。

我絕對知道, public static int flag = 0; 將在所有用戶之間共享。 但是,當我使用上面聲明的列表時,我沒有注意到它開始在所有用戶之間共享並且特定於每個用戶,但是我希望專家對此進行權衡,並讓我知道是否將此列表放入Session變量中是正確的方法完成這個。

提前致謝。

編輯:

感謝您的答復,我現在使用以下方法:

System.Web.HttpContext.Current.Cache.Add("GridListCache", GridItems, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);

看起來一切正常。 對我用於緩存值的設置有何評論?

再次感謝您的寶貴意見。

“每用戶”信息應存儲在會話狀態或自定義存儲中,以允許根據用戶身份選擇數據。

請注意,以會話狀態緩存大量數據實際上可能會降低性能,因為它會占用過多的空間(內存中狀態),或者需要在每個進程外會話狀態(如SQL /狀態服務器)的請求上進行序列化。

靜態字段始終在同一應用程序(對於多服務器情況在同一台計算機上)中的所有請求之間共享。 因此,它們應該用於存儲不依賴於用戶身份的靜態數據,例如國家/州列表。 另外,由於它在所有請求中共享,因此如果數據結構可變(例如,您可以將更多國家/地區添加到列表/詞典),則可能需要同步(即使用lock )。

通常最好在Cache類中使用.Net而不是靜態變量,因為它可以自動使數據過期/刷新,並允許您從內存中卸載未使用的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM