Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HttpContext.Current.Cache vs. HttpRuntime.Cache

I have been reading a bit about caching in c# 3.5. Got a bit confused and would appreciate clarification on elaborating what is the difference between

HttpContext.Current.Cache vs HttpRuntime.Cache vs System.Web.Caching.Cache

Also, I have read using any of the above in non-web application is not recommended but it works. What are the drawbacks?

like image 694
Elad Benda Avatar asked Apr 25 '12 06:04

Elad Benda


1 Answers

System.Web.Caching.Cache is the type which implements the cache for a Web application. HttpContext.Current.Cacheis just a wrapper and return HttpRuntime.Cache which is nothing but instance of System.Web.Caching.Cache.

Update

Refer to Is it OK to use HttpRuntime.Cache outside ASP.NET applications? for your second part.

Update: Why HttpRuntime.Cache needs to be wrapped?

In my Personal Opinion, HttpContext is the type which gets passed to IHttpHandler.ProcessPostBack and HttpApplication exposes HttpContext which is passed IHttpModule.Init. This would ensure all the dependencies are injected using Method injection. Hence they introduced a level of indirection.

The Handlers and Modules should be ignorant of the HttpRuntime on which they are hosted. While you are in a ASP.NET page, it is advisable to use this.Page.Cache instead HttpContext.Current.Cache or HttpRuntime.Cache as using HttpContext.Current would involve a overhead of resolving the current thread and HttpRuntime.Cache would create an external dependency. Page.Cache is initialized with the HttpContext.Cache which is passed to ProcessRequest

like image 140
Ramesh Avatar answered Oct 06 '22 00:10

Ramesh