小编Nil*_*zor的帖子

ASP.NET 应用占用内存。Application/Session 对象的原因是什么?

因此,我们正在对由外部公司开发的 ASP.NET 应用程序进行压力测试。我们每秒执行大约 50 个请求,大约半小时后,48 个工作进程 (w3wp.exe) 中的每一个都达到大约 400 MB 并且还在计数。在 IIS7 上运行。

现在,在干预了 dotTrace 之后,我相当肯定这里存在内存泄漏,但是在不了解应用程序的情况下很难 100% 确定。当我们向开发人员提出这个理论时,他们在 30 秒后驳回了它,说“内存在 .NET 中是自动处理的”。如果 .NET 是最终数据,那么肯定会收集 48x~400MB 的垃圾吗?

无论如何,我习惯于使用 WinForms。如何在 ASP.NET 中创建内存泄漏?在 .NET 中(错误地)使用 Application 和 Session 对象是唯一的方法吗?

编辑

自从发布这个问题以来,我了解到在请求处理程序中保存对对象的静态引用(无论是 Web 服务类、Web 表单还是其他)会导致“泄漏”。在这里可能不是正确的术语,但无论如何......这我不确定,因为我认为处理程序类在 IIS 每次请求后都会被杀死并重新创建。

所以代码如下:

public class SomeService : IService
{
    public static List<RequestData> _requestDataHistory = new List<RequestData>();
    public void SomeRequest(RequestData data)
    { 
        _requestDataHistory.Add(data);
    }        
}
Run Code Online (Sandbox Code Playgroud)

迟早会让你的服务器崩溃。也许这对大多数人来说是显而易见的,但对我来说不是:-)

如果您删除了 static 关键字,仍然不确定这是否会成为问题。是否在每次请求后处理实例

iis-7 asp.net memory-leak

5
推荐指数
1
解决办法
7099
查看次数

标签 统计

asp.net ×1

iis-7 ×1

memory-leak ×1