System.Runtime.Caching GetCount()取决于我从哪里调用缓存?

时间:2014-08-07 20:33:05

标签: c# asp.net-mvc caching

我正在使用System.Runtime.Caching库在使用服务层(WCF)的ASP.NET MVC应用程序中实现缓存,但我得到了一些奇怪的行为。这是我的缓存助手类:

public class CacheHelper
{
    private static readonly ObjectCache _cache = MemoryCache.Default;

    public static T Get<T>(string key) where T : class
    {
        try
        {
            return (T) _cache[key];
        }
        catch (Exception)
        {
            return null;
        }
    }

    public static void Add<T>(string key, T objectToCache) where T : class
    {
        _cache.Add(key, objectToCache, DateTime.Now.AddMinutes(5));
    }

    public static void Add(string key, object objectToCache)
    {
        _cache.Add(key, objectToCache, DateTime.Now.AddMinutes(5));
    }

    public static void Clear(string key)
    {
        _cache.Remove(key);
    }

    public static void ClearAll()
    {
        List<string> keys = _cache.Select(c => c.Key).ToList();

        foreach (var key in keys)
        {
            _cache.Remove(key);
        }
    }

    /// omitted for brevity
}

如果我从服务层向缓存添加结果,则该项目已成功添加到缓存中,_cache.GetCount()将返回1.如果我从服务层尝试CacheHelper.ClearAll(),则一切都很好。但是,如果我尝试从控制器调用CacheHelper.ClearAll(),则缓存显示为空,_cache.GetCount()为0,我无法解决原因?

1 个答案:

答案 0 :(得分:1)

到目前为止,据我所知,服务层是一个WCF项目。如果是这样,它将在一个独立的应用程序域上运行,而不是MVC网站。您正在使用的缓存将内容存储在应用程序域内存中,不会在不同的缓存中共享。