【发布时间】:2011-07-08 10:15:33
【问题描述】:
我有许多 ASP.NET (4.0) Web 应用程序似乎在每次请求期间泄漏(少量)内存。它是如此之小,以至于对于大多数用例而言,它不会一次成为问题数周甚至数月。我通常会尽量关闭由应用程序管理的任何连接,避免状态变量(或我的单例的实例变量)等。
我的问题是 - 这是 ASP.NET 应用程序的正常行为吗?在空闲 20 分钟后,我关闭了回收应用程序池的默认 (IIS 7) 行为。我这样做是因为应用程序需要几分钟来构建其内部缓存,并且我想避免对用户体验产生负面影响(并让他们在发出请求时等待应用程序启动)。
我知道这可以通过序列化缓存或加速缓存生成过程来缓解,但我的问题更多地与它的原理有关:我个人认为依赖 IIS 自动回收功能作为一种创可贴的方法。我错了吗?我只是因为应用程序的内存使用量与可用内存量相比不够高而没有看到垃圾收集器在工作吗?还是我应该深入挖掘内存问题?
任何见解将不胜感激。
【问题讨论】:
-
关于内存泄漏问题 - 确保释放所有一次性 (IDispose) 对象。您可以使用 Gendarme (mono-project.com/Gendarme) 等静态代码分析工具在代码中查找这些类型的问题,或者使用运行时分析器在运行时捕获这些问题。
标签: asp.net iis-7 application-pool recycle