asp.net - IIS应用程序池和.NET垃圾收集

标签 asp.net memory-leaks iis-6 connection-pooling application-pool

考虑一个存在连接池内存泄漏问题的 ASP.NET 应用程序(例如,连接未正确关闭)。

回收应用程序池是否会清除连接池(从而允许建立更多连接)?

如果连接保留在内存中直到垃圾收集器将其删除,那么当应用程序池重新启动时是否会发生这种情况(或者它们是否/可以保留)?我还了解垃圾收集器也可以随时清理它们,但它们是否仍在使用中,并且在重置或应用程序池重新启动之前无法收集?

我正在审查一个系统,其最终目标显然是纠正代码以正确管理连接,并且我正在尝试更多地了解垃圾收集/应用程序池过程。

最佳答案

是的,回收应用程序池会杀死并重新启动负责运行应用程序的 IIS 进程。此时所有资源都被释放,因为进程正在退出。

如果进程从未重新启动并且只是泄漏句柄,则垃圾收集器最终会清理它们。然而,在这种情况发生之前,您可能会耗尽任何正在泄漏的资源的句柄。这就是为什么在这些对象上调用 Dispose() 很重要(最好通过“using”模式),以便应用程序使用完它们后立即释放资源,而不是在垃圾收集器处理它们时释放资源。

关于asp.net - IIS应用程序池和.NET垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152011/

相关文章:

c - valgrind 使用 getline 函数报告内存丢失

c# - UI Thread .Invoke() 导致句柄泄漏?

asp.net - cookies 。区分大小写的路径。如何重写 URL

c# - 在 ASP.NET IIS 托管的 WCF 应用程序中偶尔调用需要 5 秒

c# - "No database selected"异常

asp.net - web.config 中加密连接字符串的意义是什么?

jQuery.validate.js 和 asp.net 母版页

c# - System.Uri.ToString() 取消转义 uri 编码的查询字符串。如何阻止它?

ios - 简单的 iOS NavigationController + PDFViewer 在每次初始化时都会泄漏 1.2 到 2 Mb 的内存。 (内存泄漏)( swift )

.net - 使 asp.net 应用程序符合 IPv6