我可以相信,一旦获得HttpContext.Current.Cache将永远有效
本文关键字:Cache Current 永远 有效 HttpContext 相信 我可以 | 更新日期: 2023-09-27 18:32:00
我有一个 ASP.NET(4.0)网站,该网站在服务器上独立于用户请求运行的操作很少。我在Web请求期间广泛使用缓存,并将对象保存在HttpContext.Current.Cache中。
问题是,对于不是由用户请求引起的所有线程,HttpContext.Current 为空,我无法访问缓存。
为了访问 HttpContext.Current.Cache,我计划使用以下方法:
class CacheWrapper
{
public void Insert(string key, Object obj)
{
Cache cache = CacheInstance;
if (cache == null)
{
return;
}
cache.Insert(key, obj);
}
public Object Get(string key)
{
Cache cache = CacheInstance;
if (cache == null)
{
return;
}
return cache.Get(key);
}
private Cache CacheInstance
{
get
{
if (_cache == null)
{
if (HttpContext.Current == null)
{
return null;
}
lock (_lock)
{
if (_cache == null)
{
_cache = HttpContext.Current.Cache;
}
}
}
return _cache;
}
}
}
因此,在向网站发出第一个请求之前,不会应用任何缓存,但是一旦发出至少一个请求,将保存对 HttpContext.Current.Cache 的引用,并且所有后台服务器操作将能够访问缓存。
问题:
我是否可以依靠一旦获得的 HttpContext.Current.Cache 将始终有效?
谢谢。非常欢迎任何关于这个想法的想法或意见!
与其使用
HttpContext.Current.Cache
,我建议使用 HttpRuntime.Cache
- 两个属性都指向相同的缓存,只是后者不像前者那样依赖于当前上下文。
如果您正在编写要在多种不同类型的应用程序/服务中使用的通用缓存包装器,您可能需要查看ObjectCache
和MemoryCache
,看看它们是否对您的需求有用。