考虑一个存在连接池内存泄漏问题的 ASP.NET 应用程序(例如,连接未正确关闭)。
回收应用程序池是否会清除连接池(从而允许建立更多连接)?
如果连接保留在内存中直到垃圾收集器将其删除,那么当应用程序池重新启动时是否会发生这种情况(或者它们是否/可以保留)?我还了解垃圾收集器也可以随时清理它们,但它们是否仍在使用中,并且在重置或应用程序池重新启动之前无法收集?
我正在审查一个系统,其最终目标显然是纠正代码以正确管理连接,并且我正在尝试更多地了解垃圾收集/应用程序池过程。
最佳答案
是的,回收应用程序池会杀死并重新启动负责运行应用程序的 IIS 进程。此时所有资源都被释放,因为进程正在退出。
如果进程从未重新启动并且只是泄漏句柄,则垃圾收集器最终会清理它们。然而,在这种情况发生之前,您可能会耗尽任何正在泄漏的资源的句柄。这就是为什么在这些对象上调用 Dispose() 很重要(最好通过“using”模式),以便应用程序使用完它们后立即释放资源,而不是在垃圾收集器处理它们时释放资源。
关于asp.net - IIS应用程序池和.NET垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152011/