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

时间:2014-09-05 22:26:07

标签: c# asp.net-mvc global-variables static-variables

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

事情似乎工作得很好。有关我用于缓存值的设置的任何注释?

再次感谢您的有用评论。

1 个答案:

答案 0 :(得分:1)

<强>&#34;每个用户的&#34;信息应存储在会话状态或自定义存储中,以允许根据用户身份选择数据。

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

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

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