2010-12-15 77 views
9

在Global.aspx中的Application_End()期间,HttpContext.Current为空。我仍然希望能够访问缓存 - 它在内存,所以想看看我是否可以参考它以某种方式将位保存到磁盘。C#ASP.NET:如何访问缓存时没有HttpContext.Current可用(为空)?

问题 - 有没有办法在HttpContext.Current为空时以某种方式引用内存中的缓存?

也许我可以创建一个全局静态变量来存储指向缓存的指针,我可以在HTTP请求上更新(伪:"static <pointer X>" = HttpRequest.Current)并通过Application_End()中的指针检索缓存的引用?

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

回答

4

在Application_End事件中,所有的缓存对象已经被处置。 如果你想访问缓存对象之前它将被丢弃,你需要使用这样的思想来添加对象缓存:

导入命名空间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 
} 

请让我知道,如果这种方法不适合你。 希望它能帮助你解决你的问题。

最好的问候,迪马。

9

我正在使用下面的getter来返回一个System.Web.Caching.Cache对象,它正在为我工​​作。

get 
{ 
    return (System.Web.HttpContext.Current == null) 
     ? System.Web.HttpRuntime.Cache 
     : System.Web.HttpContext.Current.Cache; 
} 

这基本上支持詹姆斯·冈特,但当然只是帮助在应用程序结束缓存。

编辑:我可能从Scott Hanselman博客James的一篇评论中得到了这个链接!