C#ASP.NET:当没有可用的HttpContext.Current(为null)时,如何访问缓存?

C#ASP.NET:当没有可用的HttpContext.Current(为null)时,如何访问缓存?,c#,asp.net,caching,httprequest,global-asax,C#,Asp.net,Caching,Httprequest,Global Asax,在Global.aspx中的Application\u End()期间,HttpContext.Current为空。我仍然希望能够访问缓存——它在内存中,所以我想看看是否可以以某种方式引用它以将位保存到磁盘 问题-当HttpContext.Current为空时,是否有方法引用内存中的缓存 也许我可以创建一个全局静态变量来存储指向缓存的指针,我可以在HTTP请求(伪:“static”=HttpRequest.Current)中更新缓存,并通过应用程序_End()中的该指针检索对缓存的引用 当没有H

在Global.aspx中的
Application\u End()
期间,HttpContext.Current为空。我仍然希望能够访问缓存——它在内存中,所以我想看看是否可以以某种方式引用它以将位保存到磁盘

问题-当HttpContext.Current为空时,是否有方法引用内存中的缓存

也许我可以创建一个全局静态变量来存储指向缓存的指针,我可以在HTTP请求(伪:
“static”=HttpRequest.Current
)中更新缓存,并通过应用程序_End()中的该指针检索对缓存的引用


当没有Http请求时,有更好的方法访问内存中的缓存吗?

您应该能够通过HttpRuntime.Cache访问它


根据Scott的说法,查看Reflector HttpContext.Current.Cache只调用HttpRuntime.Cache,所以您最好始终以这种方式访问它。

在应用程序结束事件中,所有缓存对象都已被释放。 如果要在释放缓存对象之前访问该对象,则需要使用类似这样的方法将对象添加到缓存:

将命名空间System.Web.Caching导入到正在使用向缓存添加对象的应用程序中

//Add callback method to delegate
var onRemove = new CacheItemRemovedCallback(RemovedCallback);

//Insert object to cache
HttpContext.Current.Cache.Insert("YourKey", YourValue, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemove);
当该对象将被处置时,将调用以下方法:

private void RemovedCallback(string key, object value, CacheItemRemovedReason reason)
{
    //Use your logic here

    //After this method cache object will be disposed
}
如果这种方法不适合您,请告诉我。 希望它能帮助你回答你的问题


致以最诚挚的问候,Dima。

我正在使用以下getter返回一个System.Web.Caching.Cache对象,该对象正在为我工作

get
{
    return (System.Web.HttpContext.Current == null) 
        ? System.Web.HttpRuntime.Cache 
        : System.Web.HttpContext.Current.Cache;
}
它基本上支持James Gaunt,但当然只会帮助在应用程序端获取缓存

编辑:我可能是从斯科特·汉斯曼(Scott Hanselman)博客上詹姆斯链接到的一条评论中得到这条消息的