使用RedGate内存档案器了解ASP.net中的内存泄漏

本文关键字:内存 net ASP 泄漏 了解 RedGate 档案 使用 | 更新日期: 2023-09-27 18:00:11

我正在运行一个大型ASP.net 4.0网站。它使用了一个流行的。网络内容管理系统,拥有数千个内容项,数百个并发用户,基本上是一个重磅网站。

在一天的过程中,IIS7工作进程的内存使用量可以上升到8-10GB。该服务器已安装16GB,目前设置为每天回收一次应用程序池。

我受到了减少内存使用的压力。大部分内存使用是由于缓存了大量数据字符串,但缓存间隔仅设置为5-10分钟,因此这些字符串最终应该会从内存中过期。

然而,在运行RedGate内存档案器后,我可以看到我认为是内存泄漏。我已经根据"由已处理对象专门保存在内存中"的对象过滤了我的实例列表结果(我在RedGate论坛上读到,这就是你发现内存泄漏的方法)。这给了我一长串保存在内存中的字符串。

对于每个字符串,我使用实例保留图来查看内存中的内容。System.string对象似乎已在某个时刻被系统缓存。网状物缓存。CacheDependency。如果我一直沿着图向上走,它会经过其他各种类,包括System。集合。专业的ListDictionary,直到它到达System。网状物文件监视器。这在一定程度上是有意义的,因为字符串是文件(images/PDFs/etc)的路径。

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

对不起,这是长篇大论。。。我有办法阻止这些内存泄漏吗?或者在不回收应用程序池的情况下清除它们?我能找到哪个类/代码正在进行缓存,看看我是否能修复泄漏吗?

使用RedGate内存档案器了解ASP.net中的内存泄漏

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

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