我应该使用多少个 SqlConnection 实例

Posted

技术标签:

【中文标题】我应该使用多少个 SqlConnection 实例【英文标题】:how many instances of SqlConnection should I use 【发布时间】:2010-02-02 22:42:19 【问题描述】:

背景: 我有一个应用程序,我很好地将接口逻辑与处理数据库查询的中间层逻辑分开。我做了很多自定义排序和缩小,所以我没有使用很多 SqlDataSource,而是使用 SqlCommands 调用很多存储过程。

我正在使用表单身份验证来创建受保护的子目录。在受保护目录的 web.config 文件中,我有更多的连接字符串链接到具有更高特权角色的用户。

问题: 我应该在中间层共享一个 SqlConnection 对象以删除重复代码,还是应该为每个操作创建一个新实例?如果我需要更改连接字符串以访问受保护的存储过程,我可以重新实例化一个共享的 SqlConnection。这里有最佳做法吗?

【问题讨论】:

【参考方案1】:

不必担心共享以节省资源。 .NET 将为您管理这个,默认情况下它会进行连接池。编写清晰易懂的代码,让 .NET 处理这些细节。

【讨论】:

【参考方案2】:

通过 using 语句,尽可能短地创建尽可能多的 SqlConnections:

using (var connection = new SqlConnection(...)) 
  connection.Open();
  ...

Sql 连接取自连接池,它会自动为您管理争用。

见:http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.80).aspx

【讨论】:

+1 为答案。 “使用”语法绝对是要走的路(我认为它也可以用于文件/流访问)。 当然可以,对于任何一次性资源(实现 IDisposable 的类)【参考方案3】:

创建一个新的(并妥善处理)并使用connection pooling。

【讨论】:

以上是关于我应该使用多少个 SqlConnection 实例的主要内容,如果未能解决你的问题,请参考以下文章

Akka - 你应该创建多少个actor实例?

Sqlalchemy:过滤关系中应该有多少个实例

SqlConnection 卡在命名管道上

每个 Hadoop 服务器应该有多少个 HBase 服务器?

SqlConnection() 无参数异常

使用 SQLConnection 连接到 SQL CE 数据库