Asp.net w3wp使用700mb-1.2gb内存,未加载

Asp.net w3wp使用700mb-1.2gb内存,未加载,asp.net,asp.net-mvc-3,entity-framework,redgate,Asp.net,Asp.net Mvc 3,Entity Framework,Redgate,我有一个使用EF/Autofac和memcached 3个前端服务器的MVC3应用程序。当启动应用程序时,一个用户可以快速跳转到300mb。在我们的生产站点上,流量很低,任何时候都不超过10个用户,很容易达到超过1.2gb的内存。这对我来说似乎是一个很大的数字 我试过Redgate内存分析器,但似乎找不到任何异常的东西 我能想到的唯一一件事可能是下面的代码导致了某种内存泄漏,你认为呢 private Dictionary<string, object> cacheDictionary

我有一个使用EF/Autofac和memcached 3个前端服务器的MVC3应用程序。当启动应用程序时,一个用户可以快速跳转到300mb。在我们的生产站点上,流量很低,任何时候都不超过10个用户,很容易达到超过1.2gb的内存。这对我来说似乎是一个很大的数字

我试过Redgate内存分析器,但似乎找不到任何异常的东西

我能想到的唯一一件事可能是下面的代码导致了某种内存泄漏,你认为呢

private Dictionary<string, object> cacheDictionary = new Dictionary<string, object>();

    private IMemcachedClient _client;

    public MemcachedManager(IMemcachedClient client)
    {
        this._client = client;
    }

    #region ICacheManager Members

    public T Get<T>(string key)
    {
        object data;
        if (!cacheDictionary.TryGetValue(key, out data))
        {
            byte[] byteData = _client.Get<byte[]>(key);
            data = CommonHelper.Deserialize<T>(byteData);
            cacheDictionary.Add(key, data);
        }
        return (T)data;
    }

    public void Set(string key, object data, int cacheTime)
    {
        if (!cacheDictionary.ContainsKey(key)) //if memcache turned off this should still work
            cacheDictionary.Add(key, data);

        data = CommonHelper.Serialize(data);
        bool setCache = _client.Store(StoreMode.Set, key, data, DateTime.Now.AddMinutes(cacheTime));

        if (!setCache)
        {
            log.ErrorFormat("Failed to set the cache item, key {0}", key);
        }
    }

如果不清除cacheDictionary,那么应该如何释放内存?IIS是否配置为回收应用程序进程?缓存字典应该在请求完成后释放。如果不是这样的话,我该如何发布这本字典?如果是这样的话,那么可能你的服务器有很多内存,而应用程序没有遇到真正的内存压力,所以GC正在花时间清理。不过,您应该更多地了解MemcachedManager对象的生命周期。我的memcached manager是在autofac中注册的,如下所示:builder.RegisterType.As.Namedcache\u static\u mem.instanceperhtprequest;您的机器内存不足吗?