打开和关闭数据库连接的最佳时间是什么?

时间:2018-03-14 09:44:15

标签: c#

每个连接都需要打开和关闭。但什么时候最好还是取决于具体情况?

  1. 启动窗口(WPF),窗体(Windows窗体),网页(ASP.NET)时打开连接,并在用户关闭窗口/窗体/网页时关闭。
  2. 仅在用户调用数据库时才打开连接。例如,用户点击"添加"按钮,我们运行SQL" INSERT ..."然后尽快关闭连接。然后,如果用户再次单击“添加/编辑”,我们必须重新连接到数据库,运行SQL并再次关闭它?
  3. 这两种解决方案都有其优势。通过保持连接,我们将使程序更具性能。通过保持连接和断开连接,性能将下降。

4 个答案:

答案 0 :(得分:1)

最好有一个我们称之为数据层的独立项目。项目可以根据需要为不同的模块(推荐)或所有文件提供不同的文件。数据库层将公开各种方法,如insert,update,get,delete等。最好只为特定方法调用打开连接,并在获得结果后立即关闭它。您可以使用如下的使用块:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();   
    //your code here insert/update/get/delete     
}

当控件超出使用块时,连接将自动处理。

答案 1 :(得分:1)

ASP.NET / Web API /(...)

  • 通常与工作单元格相关联,为传入请求创建连接,然后在处理请求时关闭
    • 长时间运行后台任务时可能会出现偏差

WPF /窗体

  • 在这种情况下,我建议在每个操作的基础上更多,即使在轮询更改时 - 如果存在这种情况
    • 打开,查询,关闭,重复

答案 2 :(得分:1)

正确的答案是将它们包装在using中,以便查询或查询您想要使用它们的查询。不要紧紧抓住连接,然后立即需要。这样做会产生更多问题,而不是它的价值。

本质上,如果您需要连接一堆查询,只需将它们包装在using语句中,如果它们被长时间运行的任务分开,请关闭它们并逐个打开它们。你可以做的最糟糕的事情就是尽量让它们保持开放状态并检查它们是否还活着。

SQL Server Connection Pooling (ADO.NET)

  

实际上,大多数应用程序只使用一种或几种不同的应用程序   连接配置。这意味着在申请期间   执行时,将重复打开许多相同的连接   关闭。为了最大限度地降低打开连接的成本, ADO.NET 使用了   优化技术称为连接池。

此外

  

连接池减少了新连接的次数   必须打开。平民保持对物质的所有权   连接。它通过保持一组活动来管理连接   每个给定连接配置的连接。每当一个用户   在连接上调用Open,pooler会查找可用的连接   池中的连接。如果池连接可用,则为   将其返回给调用者而不是打开新连接。当。。。的时候   应用程序调用{​​{1}}连接,pooler将其返回   合并的一组活动连接而不是关闭它。一旦   连接返回到池中,它已准备好在池上重用   下一次Close来电。

在以下示例中,创建了三个新的SqlConnection对象,但只需要两个连接池来管理它们。

来自MSDN的示例

Open

对于控制器 WCF 服务和CQRS,它们通常是短暂的,因此在范围生命周期中注入它们非常常见。但是对于诸如用户应用程序中的按钮点击,服务模式调用之类的事情,只需在需要时使用它们。永远不要尝试缓存或集中。

答案 3 :(得分:0)

打开连接并执行操作,例如插入,更新或删除,并在获得响应时关闭连接。

每个任务打开和关闭连接都不会在任何情况下打开连接

相关问题