我有许多ASP.NET(4.0)Web应用程序,在每个请求期间似乎泄漏(少量)内存。这是一个很小的数量,对于大多数用例来说,它不会成长为几周甚至几个月的问题。我通常会尝试关闭应用程序管理的任何连接,避免状态变量(或我的单例的实例变量)等。
我的问题是 - 这是ASP.NET应用程序的正常行为吗?我已经关闭了在闲置20分钟后回收应用程序池的默认(IIS 7)行为。我这样做是因为应用程序需要几分钟来构建其内部缓存,我希望避免对用户体验产生负面影响(让他们在发出请求时等待应用程序启动)。
我知道这可以通过序列化缓存或加快缓存生成过程来缓解,但我的问题更多地与它的原理有关:我个人认为依赖于IIS自动回收功能作为一种绑定方法。我错了吗?我只是没有看到垃圾收集器在工作,因为应用程序的内存使用量与可用内存量相比不够高?或者我应该深入研究记忆问题?
任何见解都将受到赞赏。
答案 0 :(得分:8)
不幸的是, 是正常的,尽管大多数情况下应该是伪劣的应用程序编写者。
IIS默认情况下将新创建的应用程序池配置为每1740分钟回收一次。
正如你所说,这是一个创可贴。一个写得很好的应用程序可以清除所有资源(包括悬空事件处理程序),不应该泄漏。
请参阅有关该主题的this博文。