修改ASP.Net(MVC)中的应用程序变量

时间:2011-03-15 14:28:25

标签: asp.net

我将一个大型结构存储在我通过HttpContext.Application访问的变量中。每隔一段时间,这些数据就需要改变。当我在适当的位置更新它时,是否存在传入请求将看到数据处于不一致状态的危险?是否需要(和方法)锁定部分或全部这种结构?最后,除了每次需要这个(主要是静态的)数据时查询数据库,还有其他解决这个问题的方法吗?

3 个答案:

答案 0 :(得分:1)

您不会看到应用程序变量处于不一致状态。

HttpApplicationState的MSDN页面说明(在“线程安全”部分下):

  

此类型是线程安全的。

答案 1 :(得分:1)

还有其他可用的解决方案,您可以使用许多缓存提供程序。

首先,有HttpRuntime.Cache(与HttpContext缓存相同)。 .NET 4中还有System.Runtime.Caching.MemoryCache。

您可以为缓存中的数据设置数据到期和其他规则。

http://wiki.asp.net/page.aspx/655/caching-in-aspnet/

http://msdn.microsoft.com/en-us/library/6hbbsfk6.aspx

http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

更高级的缓存包括分布式缓存。

通常,它们驻留在另一台服务器上,但也可能驻留在同一服务器上的不同进程上。 这些提供商是AppFabric(来自微软)和MemCached以及我目前无法回想起的其他提供商。

appfabric:http://msdn.microsoft.com/en-us/magazine/ff714581.aspx

memcached:http://memcached.org/

答案 2 :(得分:0)

您可能正在寻找HttpContext.Items而不是将数据存储在请求范围而不是应用程序范围中。查看this article以获得ASP.NET中不同上下文范围的精彩概述。

避免向数据库查询“主要是静态数据”的解决方案是利用ASP.NET's caching