15

我有许多 ASP.NET (4.0) Web 应用程序似乎在每个请求期间泄漏(少量)内存。它是如此之小,以至于对于大多数用例来说,它不会在几周甚至几个月内成为问题。我通常会尝试关闭由应用程序管理的任何连接,避免使用状态变量(或我的单例的实例变量)等。

我的问题是 - 这是 ASP.NET 应用程序的正常行为吗?在空闲 20 分钟后,我关闭了回收应用程序池的默认 (IIS 7) 行为。我这样做是因为应用程序需要几分钟来构建其内部缓存,并且我想避免对用户体验产生负面影响(并让他们在发出请求时等待应用程序启动)。

我知道这可以通过序列化缓存或加速缓存生成过程来缓解,但我的问题更多地与它的原理有关:我个人认为依赖 IIS 自动回收功能作为一种创可贴的方法。我错了吗?我只是因为应用程序的内存使用量与可用内存量相比不够高而没有看到垃圾收集器在工作吗?还是我应该更深入地研究内存问题?

任何见解将不胜感激。

4

1 回答 1

10

不幸的是,这正常的,尽管主要是由于劣质的应用程序编写者而不是其他原因。

出于这个原因,默认情况下 IIS 将新创建的应用程序池配置为每 1740 分钟回收一次。

正如你所说,这是一个创可贴。清除所有资源(包括悬空事件处理程序)的编写良好的应用程序根本不应该泄漏。

请参阅有关主题的博客文章。

于 2011-03-03T22:28:19.197 回答