LoginSignup
3
3

More than 5 years have passed since last update.

MemoryCacheの使いかた

Posted at

C# MemoryCache の使いかた

using System;
using System.Runtime.Caching;

namespace MemoryCacheTest_2
{
  class Program
  {
    static void Main(string[] args)
    {
      MemoryCache cache = MemoryCache.Default;

      // 上書き
      var policy = new CacheItemPolicy();
      policy.SlidingExpiration = new TimeSpan(0, 0, 2);
      cache.Add(new CacheItem("AAA", "aaa"), policy);
      Console.WriteLine(cache["AAA"]);
      System.Threading.Thread.Sleep(1000);
      cache.Set("AAA", "bbb", policy);
      Console.WriteLine(cache["AAA"]);

      // 存在確認
      if (cache["AAA"] == null)
        Console.WriteLine("NULL!!");
      else
        Console.WriteLine("Not NULL!!");
      System.Threading.Thread.Sleep(3000);
      Console.WriteLine(cache["AAA"]);
      Console.WriteLine("------------");

      if (cache["AAA"] == null)
        Console.WriteLine("NULL!!");
      Console.ReadKey();

      // 比較~キャストする必要がある
      cache.Add(new CacheItem("FFF", 0.123), policy);
      if((double)cache["FFF"] == 0.123)
        Console.WriteLine(cache["FFF"]);
      Console.ReadKey();
      return;

      // キャッシュ登録
      cache["BBB"] = new Tuple<int, int>(100, 200);
      Console.WriteLine(((Tuple<int, int>)cache["BBB"]).Item1);
      Console.WriteLine("------------");
      Console.ReadKey();

      // 3秒以上参照されなかったらキャッシュ削除
      cache.Add("CCC", 300, new CacheItemPolicy()
      {
        SlidingExpiration = new TimeSpan(0, 0, 3),
      });
      Console.WriteLine(cache["CCC"]);
      System.Threading.Thread.Sleep(3000);
      Console.WriteLine(cache["CCC"]);
      Console.WriteLine("------------");
      Console.ReadKey();

      // 3秒たったら強制的に削除
      cache.Add("DDD", 500, new CacheItemPolicy()
      {
        AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(3.0),
      });
      Console.WriteLine(cache["DDD"]);
      System.Threading.Thread.Sleep(3000);
      Console.WriteLine(cache["DDD"]);
      Console.WriteLine("------------");
      Console.ReadKey();

      // 
      cache.Add("EEE", 700, new CacheItemPolicy()
      {
        RemovedCallback = arg =>
        {
          Console.WriteLine("キー {0} が削除されました", arg.CacheItem.Key);
          Console.WriteLine("------------");
          Console.ReadKey();
        }
      });
      cache.Remove("EEE");
    }
  }
}
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3