Jeg har lavet et lille simpelt eksempel, der viser brug af System.Runtime.Caching i .Net 4.0 framework. Eksemplet er lavet, da der kan være behov for caching udenfor ASP.Net applikationer, og undgåelse af brug af HttpRuntime.Cache. Principperne er de samme fra mit tidligere indlæg, dog har jeg introduceret en unik cachenøgle, man skal kalde caching som parameter.

Find eksemplet her.

   1:  /// <summary>
   2:  /// Varetager caching af objekter.
   3:  /// </summary>
   4:  public static class CachingHelper {
   5:      /// <summary>
   6:      /// Henter cached data.
   7:      /// </summary>
   8:      /// <typeparam name="T">Generisk format.</typeparam>
   9:      public static T GetCachedData<T>(string key){
  10:          var cache = MemoryCache.Default;
  11:          return cache[key] != null ? (T) cache[key] : default(T);
  12:      }
  13:      /// <summary>
  14:      /// Cacher data.
  15:      /// </summary>
  16:      /// <typeparam name="T">Generisk format.</typeparam>
  17:      public static T CacheData<T>(T o, string key){
  18:          var cache = MemoryCache.Default;
  19:          cache.Add(key, o, new CacheItemPolicy());
  20:          return o;
  21:      }
  22:      /// <summary>
  23:      /// Fjerner cachen.
  24:      /// </summary>
  25:      public static void ClearCache<T>(string key){
  26:          var cache = MemoryCache.Default;
  27:          if (cache.Contains(key) && (cache[key].GetType() == typeof(T)))
  28:          {
  29:              cache.Remove(key);
  30:          } 
  31:      }
  32:  }


'ClearCache' metoden sikrer at typen af det objekt, man vil fjerne fra cachen er valid ifht. nøglen, man sender med som parameter.
Der bør alligevel sættes en fornuftig CacheItemPolicy, hvor man kan definere, hvor længe cachen skal holde på et objekt.
Det kan fx. defineres på følgende måde, hvor der caches i ét minut:

   1:  /// <summary>
   2:  /// Cache politik, der definerer hvorlænge cachen skal holdes.
   3:  /// </summary>
   4:  private static readonly CacheItemPolicy CachePolitik = new CacheItemPolicy
   5:              {
   6:                  SlidingExpiration = new TimeSpan(0, 0, 1, 0)
   7:              };