在 ASP.NET 中使用静态列表与静态变量

本文关键字:静态 列表 变量 ASP NET | 更新日期: 2023-09-27 18:20:47

//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;将在所有用户之间共享。但是当我使用上面声明的列表时,我没有注意到它开始在所有用户之间共享并特定于每个用户,但我希望专家对此进行权衡,并让我知道将此列表放在会话变量中是否是实现这一目标的正确方法。

提前谢谢。

编辑:

感谢您的回复,我现在正在使用以下内容:

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);

事情似乎进展顺利。对我用于缓存值的设置有任何评论吗?

再次感谢您的有用评论。

在 ASP.NET 中使用静态列表与静态变量

">

每用户"信息应存储在会话状态或自定义存储中,允许根据用户身份选择数据。

请注意,在会话状态中缓存大量数据实际上可能会降低性能,因为它消耗了太多空间(内存中状态(或需要在进程外会话状态(如 SQL/状态服务器(的每个请求上进行序列化。

静态字段始终在同一应用程序中的所有请求之间共享(对于多服务器情况,在同一台计算机上(。因此,它们应该用于存储不依赖于用户身份的静态数据,如国家/州列表。此外,由于它是在所有请求之间共享的,如果数据结构是可变的(即您可以将更多国家添加到列表/字典(,则可能需要同步(即使用lock(。

通常最好在类中使用 .Net 而不是静态变量Cache因为它允许自动过期/刷新数据,并允许您从内存中卸载未使用的对象。