SQL CONNECTION最佳实践

目前讨论了具有单个sql连接体系结构的优缺点。

详细说明我们正在讨论的是,在应用程序创建时打开一个sql连接,并在应用程序关闭或错误关闭sql连接。 并且根本不创建另一个连接,而只使用那个与DB交谈。

我们想知道社区的想法。

一旦您不再需要它在一段不确定的时间内关闭连接。 通过这样做,连接返回到连接池(如果启用了连接池),并且可以由其他人(重新)使用。

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

如果您在应用程序的整个生命周期中保持连接,并且您有该应用程序的多个用户(因此应用程序的多个实例和多个连接),并且您的数据库服务器仅限于x个并发数连接,然后你可能有问题….

另请参阅ado.net的最佳做法

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

我认为这是一个坏主意,原因有几个。

  1. 如果您有10,000名用户正在使用您的应用程序,则会持续打开10,000个连接
  2. 如果必须重新启动Sql Server,那么所有这10,000个连接都将失效,并且您的应用程序将突然 – 假设您已包含重新连接逻辑 – 正在进行10000次近同步重新连接请求。

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

在幕后,ADO.NET使用连接池来管理与数据库的连接。 我建议将其留在连接池中以满足您的连接需求。 在应用程序期间保持连接打开是个坏主意。

我使用一个名为Richmond Systems的帮助台系统,它在应用程序的生命周期中使用一个连接,而作为笔记本电脑的用户,它在后面是一个皇家的痛苦。 即使我将笔记本电脑打开,无线接入点之间的跳跃也足以降低数据库连接。 然后该软件抱怨数据库连接,进入错误状态并且不会关闭。 必须从任务管理器手动杀死它。

简而言之, 请勿保持打开数据库连接的时间长于必要时间。

但另一方面,我经常对打开和关闭连接持谨慎态度。 连接池比没有连接池便宜得多,但即使有了池,池管理器也可能决定增加或缩小池,将其重新转换为昂贵的操作。

我的一般规则是在用户启动某个操作,执行工作,然后在等待下一个用户输入之前关闭连接时打开连接。 对于任何给定的“更新”按钮单击或其他,我通常只有一个连接。 但是你肯定不想在等待用户输入时保持连接打开,如果你可以因为其他人提到的所有原因而全部帮助它。 您可以在用户按下另一个键或触摸另一个按钮之前等待几天 – 如果他离开计算机并去休假怎么办? 将资源占用不可预测的时间就像是坏消息。 在大多数情况下,等待用户输入的经过时间将远远超过实际工作的时间。