C# SQL连接最佳实践

C# SQL连接最佳实践,c#,sql,C#,Sql,目前正在讨论使用单一sql连接体系结构的优缺点 为了详细说明我们正在讨论的是,在应用程序创建时打开sql连接,在应用程序关闭或错误关闭sql连接时。并且根本不创建另一个连接,而是仅使用该连接与数据库进行通信 我们想知道社区是怎么想的 一旦在未定义的时间内不再需要连接,请立即关闭连接。这样,连接将返回到连接池(如果启用了连接池),并且其他人可以(重新)使用该连接 (连接是昂贵的资源,有时是有限的) 如果您在应用程序的整个生命周期内保持连接,并且该应用程序有多个用户(因此应用程序有多个实例,并且有多

目前正在讨论使用单一sql连接体系结构的优缺点

为了详细说明我们正在讨论的是,在应用程序创建时打开sql连接,在应用程序关闭或错误关闭sql连接时。并且根本不创建另一个连接,而是仅使用该连接与数据库进行通信


我们想知道社区是怎么想的

一旦在未定义的时间内不再需要连接,请立即关闭连接。这样,连接将返回到连接池(如果启用了连接池),并且其他人可以(重新)使用该连接

(连接是昂贵的资源,有时是有限的)

如果您在应用程序的整个生命周期内保持连接,并且该应用程序有多个用户(因此应用程序有多个实例,并且有多个连接),并且如果您的DB服务器被限制为只有x个并发连接,那么您可能会遇到问题


另请参见

出于几个原因,我认为这是个坏主意

  • 如果你有10000个用户在使用你的应用程序,那就是10000个连接在不断打开
  • 如果您必须重新启动Sql Server,那么所有这10000个连接都将失效,并且您的应用程序将突然发出10000个几乎同时发生的重新连接请求(假设您包含了重新连接逻辑)

  • 要扩展到第1点,您应该尽快关闭连接,因为否则您将在有限的时间内耗尽有限的资源。如果将Sql Server配置为最多允许10001个同时连接,则在任何时间只能有10001个用户运行应用程序。如果您按需打开/关闭连接,那么您的应用程序将进一步扩展,因为所有活动用户同时使用数据库的可能性实际上很低。

    实际上,ADO.NET使用连接池来管理与数据库的连接。我建议让连接池来处理您的连接需求。在应用程序期间保持连接打开是个坏主意

    遵循这个简单的规则。。。尽可能晚地打开连接并尽快关闭。

    我使用一个名为Richmond Systems的帮助台系统,在应用程序的生命周期中使用一个连接,作为笔记本电脑用户,这是一个巨大的后遗症。即使当我打开笔记本电脑时,无线接入点之间的跳跃也足以使DB连接中断。然后,软件抱怨数据库连接,进入错误状态,无法关闭。必须从任务管理器手动终止它


    简而言之,不要让打开数据库连接的时间超过必要的时间。但另一方面,我会小心不要太频繁地打开和关闭连接。使用连接池比不使用连接池要便宜得多,但即使使用连接池,池管理器也可能决定扩大或缩小池,使其重新成为一项昂贵的操作


    我的一般规则是在用户启动某些操作时打开连接,完成工作,然后在等待下一个用户输入之前关闭连接。对于任何给定的“更新”按钮点击或任何东西,我通常只有一个连接。但是,如果出于其他人提到的所有原因,您完全不希望在等待用户输入时保持连接打开。你可以在用户按下另一个键或触摸另一个按钮之前等待几天——如果他离开电脑去度假呢?把资源占用在不可预知的时间上是个坏消息。在大多数情况下,等待用户输入所用的时间将远远超过实际工作所用的时间。

    我认为这也应该引起您的兴趣: