在asp.net mvc应用程序中使用memorycache它每次都会被创建

时间:2014-08-12 07:31:20

标签: c# asp.net-mvc iis memorycache

Environment:
      asp.net mvc
      iis

我在memorycache周围创建了一个包装器和具体类,它在 constrcutor 中设置了memoryCache

  public class AbijMemoryCache : IAbijMemoryCache
{
    private readonly MemoryCache _cache;

    public AbijMemoryCache()
    {
        if (_cache == null)
        {

            _cache = MemoryCache.Default;

        }
    }
}

然后在统一中只获取一个内存缓存实例我使用 ContainerControlledLifetimeManager

  container.RegisterType<IAbijMemoryCache, AbijMemoryCache>(new ContainerControlledLifetimeManager());

我使用以下代码

在我的homeController中设置缓存
  var policy = new CacheItemPolicy();
  _cache.Set(key, value, policy);

但上传到iis缓存后有时会变空。

检查

        _cache.Get(key) **`it gets null`**

为什么它变为空? 我该怎么办?

1 个答案:

答案 0 :(得分:0)

我发现MemoryCache正在通过引用工作,所以如果你确实将一个对象分配给memoryCache,它会 通过refremce

  _cache.Set(key, value, policy); //value should not be an object.

你可以在缓存值之前使用序列化,这样可以像

那样完成
 var cloneValue = SerializationCloner.DeepFieldClone(value);