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");
}
}
}