2011-03-15 46 views
1

我通过HttpContext.Application存储了一个保存我的应用程序参考数据的大型结构,该变量通过HttpContext.Application访问。每过一段时间,这些数据都需要改变。当我更新它时,传入的请求是否会有数据处于不一致状态的危险?是否有需要(和方法)来锁定某些或全部这种结构?最后,除了在每次需要此数据库(大多是静态数据)时查询数据库以外,是否还有其他解决此问题的方法?在ASP.Net(MVC)中修改应用程序变量

回答

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(来自Microsoft)和MemCached以及我目前无法回想的其他人。

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

的memcached:http://memcached.org/

0

您可能正在查找HttpContext.Items,而是将数据存储在请求范围而不是应用程序范围中。查看this article可以很好地了解ASP.NET中不同的上下文作用域。

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

1

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

HttpApplicationState的MSDN页说(根据线程安全部分):

此类型是线程安全的。