首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RedGate内存分析器了解ASP.net中的内存泄漏

使用RedGate内存分析器了解ASP.net中的内存泄漏
EN

Stack Overflow用户
提问于 2013-02-20 19:18:12
回答 1查看 761关注 0票数 6

我正在运行一个大型的ASP.net 4.0网站。它使用流行的.Net内容管理系统,拥有数以千计的内容条目,数以百计的并发用户--基本上是一个繁重的网站。

在1天的时间内,IIS7工作进程的内存使用量可能会上升到8-10 to。服务器安装了16 is,当前设置为每天回收一次应用程序池。

我面临着减少内存使用的压力。大部分内存使用是由于缓存大型数据字符串-但缓存间隔仅设置为5-10分钟-因此这些字符串最终应该在内存中过期。

但是,在运行RedGate内存分析器之后,我可以看到我认为是内存泄漏。我已经根据对象过滤了我的实例列表结果,这些对象“完全由已处置的对象保存在内存中”(我在RedGate论坛上看到,这是您查找内存泄漏的方法)。这给了我一个很长的字符串列表,这些字符串被保存在内存中。

对于每个字符串,我使用实例保留图来查看是什么将其保存在内存中。System.Web.Caching.CacheDependency似乎在某个时候缓存了System.string对象。如果我沿着这张图一直往上走,它会遍历各种其他类,包括System.Collections.Specialized.ListDictionary,直到它到达System.Web.FileMonitor。这是有意义的,因为字符串是文件(图像/PDF/等)的路径。

CMS似乎正在缓存文件的路径,但这些缓存的对象随后被“泄漏”。随着时间的推移,这会累积并消耗RAM。

抱歉,这是长篇大论。有没有办法阻止这些内存泄漏?或者在不回收应用程序池的情况下清理它们?我是否可以找到正在进行缓存的类/代码,以查看是否可以修复泄漏?

EN

回答 1

Stack Overflow用户

发布于 2013-02-20 20:08:58

这听起来像是一个非常常见的问题,即内容作为会话状态的一部分留在内存中。如果是这种情况,你唯一的选择是1.不要在每个用户的会话中放太多东西,2.将会话生存期设置为更短的值(我想默认是20分钟),3.定期回收应用程序池。

作为1的一部分,我发现在数据网格控件中显示数据有“好的方法”和“坏的方法”。您可能希望检查是否只复制了所需的数据,而不是意外地维护了对整个数据网格的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14978522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档