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