Is System.Web.Caching or System.Runtime.Caching preferable for a .NET 4 web application

22,517

Solution 1

Microsoft recommends using System.Runtime.Caching for all caching purposes. See this: http://msdn.microsoft.com/en-us/library/dd997357.aspx

Although, I have come across a couple threads where people are having issues with the MemoryCache.Default instance. After a while, it stops working properly. Any item you add using the Add or Set method does not actually get added to the cache. I tried the same and was able to reproduce this issue with explicitly calling MemoryCache.Default.Dispose() method.

Here are the links: MemoryCache Empty : Returns null after being set

http://forums.asp.net/t/1736572.aspx/1

My recommendation is to use the System.Web.Caching (HttpContext.Current.Cache)

UPDATE:

This issue has been fixed by MS. Check the accepted answer in the post below: Runtime Cache Issue Resolved

Solution 2

System.Runtime.Caching allows you to cache across all .Net apps, not just the IIS worker process. So if you have a requirement that will access the cache in multiple scenarios, use System.Runtime. Also you can check this cache adapter which allows you to swap between runtime, web, and app fabric caching. https://bitbucket.org/glav/cacheadapter

One more thing, if you have a multi-server farm, with a load balanced configuration make sure you have sticky-sessions or a distributed cache model.

Share:
22,517

Related videos on Youtube

Tim Goodman
Author by

Tim Goodman

Updated on July 09, 2022

Comments

  • Tim Goodman
    Tim Goodman almost 2 years

    I am adding caching to an ASP.NET web application. This is .NET 4, so I can use the classes in the System.Runtime.Caching namespace (which, as I understand it, was added to provide similar functionality to that found in System.Web.Caching, but for non-Web-apps.)

    But since this is a web app, am I better off using System.Web.Caching? Or is the newer System.Runtime.Caching superior in some way?

  • TrueWill
    TrueWill almost 11 years
    Big +1! Note though that Microsoft fixed the bug - see Scott Hanselman's answer to the linked question above.
  • Maarten Kieft
    Maarten Kieft over 10 years
    Can you please update your answer? I found this question and your answer, but some more searching told me that there is now a fix for that so Runtime.Caching is recommended now :)
  • dotnetster
    dotnetster over 10 years
    Updated the answer to reflect the latest status.
  • Pankaj Shrestha
    Pankaj Shrestha almost 8 years
    you should not call MemoryCache.Default.Dispose() method, if you plan use MemoryCache.Default afterwards. Instead do the following. var memoryCache = MemoryCache.Default; memoryCache.Trim(100); //for issues, when some cache items are not cleared foreach (var item in memoryCache.ToList()) { memoryCache.Remove(item.Key); }