rf_*_*son 6 c# asp.net memory-leaks redgate memory-profiling
我正在运行一个大型的ASP.net 4.0网站.它使用了流行的.Net内容管理系统,拥有数千个内容项,数百个并发用户 - 基本上是一个沉重的网站.
在1天的过程中,IIS7工作进程的内存使用量可以增加到8-10GB.服务器已安装16GB,目前设置为每天回收一次应用程序池.
我受到压力以减少内存使用量.大部分内存使用是由于缓存大量数据 - 但缓存间隔仅设置为5-10分钟 - 因此这些字符串最终应该从内存中过期.
但是在运行RedGate Memory Profiler之后,我可以看到我认为的内存泄漏.我已经通过"由Disposed Objects专门保存在内存中"的对象过滤了我的实例列表结果(我在RedGate论坛上看到这就是你发现内存泄漏的方法).这给了我一长串的内存字符串.
对于每个字符串,我使用实例保留图来查看内存中保存它的内容.System.string对象似乎在某些时候被System.Web.Caching.CacheDependency缓存了.如果我一直遵循图形,它会通过各种其他类,包括System.Collections.Specialized.ListDictionary,直到它到达System.Web.FileMonitor.这是有道理的,因为字符串是文件的路径(图像/ PDF /等).
似乎CMS正在缓存文件的路径,但这些缓存的对象随后被"泄露".随着时间的推移,这会增加并消耗RAM.
对不起,这是啰嗦......有没有办法阻止这些内存泄漏?或者在不诉诸回收应用程序池的情况下清除它们?我可以找到正在进行缓存的类/代码,看看我是否可以修复泄漏?
小智 0
这听起来像是一个非常常见的问题,即内容作为会话状态的一部分留在内存中。如果是这种情况,您唯一的选择是 1. 不要在每个用户的会话中放入太多内容,2. 将会话生命周期设置为更短的时间(我认为默认值为 20 分钟),以及 3. 定期回收应用程序池。
作为 1. 的一部分,我发现在数据网格控件中呈现数据有“好方法”和“坏方法”。您可能需要检查是否只复制所需的数据,而不是意外地维护对整个数据网格的引用。
| 归档时间: |
|
| 查看次数: |
745 次 |
| 最近记录: |