Difference between HttpRuntime.Cache and HttpContext.Current.Cache?

What is the difference between HttpRuntime.Cache and HttpContext.Current.Cache?


Solution 1:

I find following detail from http://theengineroom.provoke.co.nz/archive/2007/04/27/caching-using-httpruntime-cache.aspx

For caching I looked into using HttpContext.Current.Cache but after reading other blogs I found that caching using HttpContext uses HttpRuntime.Cache to do the actual caching. The advantage of using HttpRuntime directly is that it is always available, for example, in Console applications and in Unit tests.

Using HttpRuntime.Cache is simple. Objects can be stored in the cache and are indexed by a string. Along with a key and the object to cache the other important parameter is the expiry time. This parameter sets the time before the object is dropped from the cache.

Here is good link for you.

Another good resource.

Solution 2:

Caching using HttpContext uses HttpRuntime.Cache to do the actual caching. The advantage of using HttpRuntime directly is that it is always available in console applications and in unit tests.

Solution 3:

Using HttpRuntime.Cache is simple to use than HttpContext.Current.Cache.As already said that objects can be stored in the cache and are indexed by a string.Also in unit test and console HttpRuntime this available.

Here is an example to use HttpRuntime.Cache.

public static XmlDocument GetStuff(string sKey) 
{
XmlDocument xmlCodes;
xmlCodes = (XmlDocument) HttpRuntime.Cache.Get( sKey );
if (xmlCodes == null)
{
      xmlCodes = SqlHelper.ExecuteXml(new dn("Nodes", "Node"), "Get_Stuff_From_Database", sKey);
      HttpRuntime.Cache.Add(sKey, xmlCodes, null,
      DateTime.UtcNow.AddMinutes(1.0),
      System.Web.Caching.Cache.NoSlidingExpiration,
      System.Web.Caching.CacheItemPriority.Normal, null);
}
return xmlCodes;
}

What this example does actually:


The method GetStuff takes a string parameter which is used to retrieve a set of items from the database. The method first checks to see if an XmlDocument indexed by the parameter key is in the cache. If it is, it simply returns this object, if not it queries database. After it has retrieved the document from the database it then put it into cache. If this method is called again within the stipulated time, it will get the object rather than hitting the database.