首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows中不调用SqlConnection.Close() --为什么有时它会工作

在Windows中不调用SqlConnection.Close() --为什么有时它会工作
EN

Stack Overflow用户
提问于 2011-07-20 22:10:58
回答 3查看 644关注 0票数 3

我的一个朋友在家里托管了一个ASP.NET 2.0应用程序,直到他搬了过来,我提出把它放在我自己的Win7 7/IIS7 7/SQLE2008r2服务器上。

当我将代码放到服务器上时,只需要几次请求,我就会得到以下错误:

超时过期了。从池获得连接之前经过的超时时间。这可能是因为所有池连接都在使用中,并且达到了最大池大小。

首先,我找到了最大的池大小来临时“修复”这个问题。然后我仔细看了看他的代码。原来他从来没有给SqlConnection.Close()打过电话。因此,我添加了关闭和删除最大池大小从所有连接字符串,并解决了这个问题。

我问他是如何解决这个问题的,如果他以某种方式增加了服务器默认web.config或其他什么的每个默认情况下的最大池大小。他回答说".NET垃圾收集“。因此,他依靠垃圾收集来关闭他的数据库连接,并依靠他的服务器工作。但在我的身上却没有。

有人能解释原因吗?他正在度假,所以我不想打扰他,问他关于版本等的细节,但我猜他是在运行Win2k8。

EN

Stack Overflow用户

发布于 2011-07-20 22:26:09

依赖垃圾收集器关闭连接的问题是,您不能。

如果让垃圾收集器清理连接ojbects,则无法控制何时发生这种情况。垃圾收集器最终会关闭它们,但这取决于许多因素,例如,有多少可用内存,以及使用了多少内存。这些因素在不同的服务器之间是不同的,但它们也可能随着时间的推移而改变,因此您甚至不能指望垃圾收集器总是在同一台服务器上工作。

不同的数据库在有许多未关闭的连接时反应不同。例如,Access数据库对此非常敏感,不允许超过64个连接。

无论如何,您应该始终关闭连接和数据读取器。另外,您应该使用using块或try...finally块来确保连接总是关闭的,即使代码中有问题。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6769171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档