我应该将ASP.NET应用程序池设置为自动回收吗?

Ass*_*saf 13 asp.net iis-7 application-pool recycle

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

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

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

任何见解将不胜感激.

Ode*_*ded 9

不幸的是,这正常的,但大部分都应该伪劣的应用程序编写者而不是其他任何东西.

默认情况下,IIS会将新创建的应用程序池配置为每1740分钟回收一次.

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

请参阅博客文章,了解该主题.