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