目前正在讨论拥有单一sql连接架构的优缺点。
详细说明我们正在讨论的是,在应用程序创建时打开一个sql连接,并在应用程序关闭或错误关闭sql连接。而根本不创建另一个连接,而只使用那个连接与DB进行通信。
我们想知道社区的想法。
答案 0 :(得分:9)
在不确定的时间内不再需要时立即关闭连接。通过这样做,连接返回到连接池(如果启用了连接池),并且可以由其他人(重新)使用。
(连接是昂贵的资源,有时是有限的。)
如果您在应用程序的整个生命周期内保持连接,并且您有该应用程序的多个用户(因此该应用程序的多个实例和多个连接),并且您的数据库服务器仅限于只有x并发连接数,那么你可能会遇到问题......
答案 1 :(得分:7)
遵循这个简单的规则......尽可能晚地打开连接并尽快关闭它。
答案 2 :(得分:2)
我认为这是一个坏主意,原因有几个。
要扩展第1点,您应该尽快关闭连接,否则您可能会使用有限的资源,这可能是一段无限的时间。如果您将Sql Server配置为允许最多10,001个并发连接,那么您一次只能有10,001个用户运行您的应用程序。如果您按需打开/关闭连接,那么您的应用程序将扩展,因为所有活跃用户同时使用数据库的可能性实际上很低。
答案 3 :(得分:1)
在幕后,ADO.NET使用连接池来管理与数据库的连接。我建议将其留在连接池中以满足您的连接需求。在应用程序期间保持连接打开是个坏主意。
答案 4 :(得分:1)
我使用名为Richmond Systems的帮助台系统,该系统在应用程序的生命周期中使用一个连接,而作为笔记本电脑用户,它背后是一个皇家的痛苦。即使我打开笔记本电脑,无线接入点之间的跳跃也足以降低数据库的连接。然后该软件抱怨数据库连接,进入错误状态并且不会关闭。必须从任务管理器手动杀死它。
简而言之,请勿长时间打开数据库连接,以获得更长时间的连接。
答案 5 :(得分:1)
但另一方面,我经常对开启和关闭连接持谨慎态度。连接池比没有连接池便宜得多,但即使使用池,池管理器也可能决定增加或缩小池,将其重新设置为昂贵的操作。
我的一般规则是在用户启动某个操作,执行工作,然后在等待下一个用户输入之前关闭连接时打开连接。对于任何给定的“更新”按钮单击或其他,我通常只有一个连接。但是你绝对不希望在等待用户输入时保持连接打开,如果你可以为其他人提到的所有原因提供帮助。您可以在用户按下另一个键或触摸另一个按钮之前等待几天 - 如果他离开计算机并去休假怎么办?将资源占用不可预测的时间就像是坏消息。在大多数情况下,等待用户输入的经过时间将远远超过实际工作的时间。