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

标签 asp.net iis-7 application-pool recycle

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

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

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

任何见解将不胜感激。

最佳答案

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

为此,IIS 默认将新创建的应用程序池配置为每 1740 分钟回收一次。

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

this关于该主题的博客文章。

关于asp.net - 我应该将 ASP.NET 应用程序池设置为自动回收吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187397/

相关文章:

c# - WCF 使用自定义 ApplicationPool Identity 慢 3 倍

iis-7 - 使用 IIS7 的 URL 重写捕获 Cookie 中的值

c# - 当应用程序池停止时如何保持 FileSystemWatcher 运行

c# - WCF 休息 : What is it expecting my XML to look like in requests?

c# - 在某些情况下不会抛出 DuplicateKeyException

asp.net - 当页面位于 iFrame 中时, session 变量未保存

web - wix 安装程序/创建网站并分配新的或现有的 Web 应用程序池

jquery - JVectorMap 的 map ?

asp.net - 将 "onclick"属性添加到 asp.net 下拉列表项

asp.net - 从请求中识别应用程序池的名称