我的一位朋友在家中托管了一个ASP.NET 2.0应用程序,直到他移动并且我提出将它托管在我自己的Win7/IIS7/SQLE2008r2上服务器。在Windows窗体中不调用SqlConnection.Close() - 为什么它有时会起作用
当我把代码我的服务器上,短短几年后,请求我会得到这个错误:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
首先,我打开了最大池大小,暂时“修复”的问题。然后我仔细看了一下他的代码。原来,他从来没有打电话给SqlConnection.Close()
。所以我添加了关闭并从所有连接字符串中删除了最大池大小,并且问题解决了。
我问他如何解决这个问题,如果他在某种程度上增加了默认服务器的默认最大池大小web.config
或其他东西。他回答说:“.NET垃圾收集”。所以他依靠垃圾收集来关闭他的数据库连接,并在他的服务器上工作。但在我看来,它并没有。
任何人都可以解释为什么吗?他正在度假,所以我不想打扰他向他询问版本等细节,但我猜他会运行Win2k8。
我应该补充说,我知道这不是一个好习惯,而且我知道如何正确地做,以及为什么。我的主要问题是为什么它长时间在他的服务器上运行良好。这只是他内存太少导致GC更积极的问题吗? – carlsb3rg