gpt4 book ai didi

asp.net - 在 Windows 窗体中不调用 SqlConnection.Close() - 为什么它有时会起作用

转载 作者:行者123 更新时间:2023-12-02 10:59:39 24 4
gpt4 key购买 nike

我的一个 friend 在家里托管一个 ASP.NET 2.0 应用程序,直到他搬家,我提出将其托管在我自己的 Win7/IIS7/SQLE2008r2 服务器上。

当我将代码放在我的服务器上时,经过几次请求后我会收到此错误:

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。

最佳答案

Jeff Atwood has a wonderful article about this very thing, I highly recommend this read.

依靠 .NET 垃圾收集来关闭 SQL 连接是一个禁忌。 SqlConnection.Close() 以及 Dispose() 应始终被调用,但至少要调用 Close()Note that the using keyword will take care of disposing objects automatically for you (example).

任何事情都依赖 GC 是不负责任和愚蠢的。这就像完全忽略内存并说“哦,当用户耗尽 RAM 时,他们可以重新启动!:D”。

简而言之,代码在新部署站点上无法运行不是您的错。在这种情况下,是编码人员不负责任的 SQLConnection 处理。

关于asp.net - 在 Windows 窗体中不调用 SqlConnection.Close() - 为什么它有时会起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com