2014-09-05 46 views
0
//ASP.NET.. Using GridListCache as global variable for single user 
public static List<GridItems> GridListCache = new List<GridItems>(); 

在ASP.NET中,我使用全局靜態列表來跟蹤網格項目。在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); 

事情似乎是工作的罰款。對我用於緩存值的設置有何評論?

再次感謝您的有用評論。

+0

」是完成此操作的正確方法。「你打算怎麼做? – frenchie 2014-09-05 22:29:17

+1

靜態對象將在所有用戶之間共享。 – 2014-09-05 22:30:41

+0

http://stackoverflow.com/questions/25359876/variable-in-a-page-is-it-shared可能的重複 – 2014-09-05 22:31:14

回答

1

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

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

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

通常更好的方式是使用.Net中的Cache類而不是靜態變量,因爲它允許自動過期/刷新數據並讓您從內存中卸載未使用的對象。 「