使用DataContext时SQL连接保持打开状态

时间:2015-02-19 14:22:53

标签: c# sql-server linq entity-framework

我有一个简单的测试应用程序,它连接到SQL DB,然后在LINQ中执行查询

执行命令时,我可以看到连接何时打开。

但是当我发出

 db.Connection.Close();
 db.Dispose();

在关闭应用程序之前,SQL中的连接仍然存在。

我是系统中唯一的用户。

2 个答案:

答案 0 :(得分:4)

您使用的是连接池吗?这可能会将连接返回到池而不是完全关闭它。

这是一个描述汇集的链接:https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx

从MSDN(上面的链接):“当应用程序在连接上调用Close时,pooler将它返回到池化的活动连接集,而不是关闭它。一旦连接返回到池,它就是准备好在下次公开电话中重复使用。

编辑:作为测试,您可以让连接闲置4-8分钟,看看它是否已关闭?

同样来自同一链接:“连接池在空闲大约4-8分钟后,或者如果池中检测到与服务器的连接已被切断,则从池中删除连接。”

答案 1 :(得分:2)

" SQL中的连接仍然存在" - 您应该提供有关此方法的更多信息。我将假设您正在监视来自DBMS端的连接。

启用连接池(这是SqlClient.SqlConnection的默认行为),关闭SqlConnection实例不会立即关闭与数据库的基础连接。这种联系仍然存在于温暖的氛围中。状态大约8分钟(如果内存服务)并准备好由具有完全相同连接字符串的另一个SqlConnection实例使用。

关于你是否应该处理数据库上下文的其他问题。如果明确处理了上下文,则控制基础(非托管)热连接可被另一个SqlConnection实例使用的时刻,这样可以使同时打开的连接总数保持较低。

注意:行

db.Connection.Close();

之前

db.Dispose();

绝对没必要。