0

设置:

我正在用 C# 创建一个 .NET WinForms 应用程序,以使我们的技术支持人员能够轻松地针对我们产品的 SQL Server 2005 数据库执行常见任务。该应用程序正在使用 ADO.NET ( SqlConnection) 连接到数据库。开发此应用程序时需要考虑的一个问题是,每次启动任务(查询)时,尽量减少连接/重新连接到数据库的开销。据我了解,造成这种开销的主要原因是数据库具有AutoClose属性设置为“真”。我很想改变这一点,但不幸的是它不在我的控制之下。我也知道创建数据库连接无论如何都会涉及一些开销。我有一个应用程序的工作实现,它在应用程序的整个生命周期中保持一个连接(除非它之前以某种方式关闭)。然后我偶然发现了一篇关于ADO.NET 中的连接池的 MSDN 文章。

阅读文章(以及此处此处此处的其他问题/答案)后,即使我的应用程序已正确处理其SqlConnection对象,ADO.NET 连接池似乎仍将保持与数据库的连接。连接将保留在池中并且可以重复使用,直到它空闲一段时间或以其他方式中断。因此,我在应用程序中维护单个连接的工作似乎是不必要的,而且肯定比SqlConnection每次需要时简单地创建/处置 a 更危险。

问题:

  1. 将 ADO.NET 连接池与“AutoClose”设置为“true”的 SQL Server 数据库一起使用时会出现什么影响?

  2. 我意识到,当我描述我认为连接池在幕后工作的方式时,我可能过于简单化了,但除此之外,我的理解准确吗?如果不是,哪里需要修正?

4

1 回答 1

2

第一个问题,为什么数据库设置为自动关闭?有效的场景包括多租户托管和 Express 实例,但除此之外,您的数据库不应设置为自动关闭。

连接池将维护在 SQL Server实例上打开的会话。会话将保留对当前数据库的引用,从而防止其自动关闭。如果您的场景涉及单个应用程序数据库,则所述数据库不应自动关闭(不是多租户,数千个数据库,场景)。如果您的场景涉及数以千计的数据库,那么您的应用程序不应该让它们保持打开状态,而且不能让它们全部保持打开状态。

我认为在您的情况下正确的操作是将数据库设置为自动关闭OFF

于 2009-08-13T23:01:36.080 回答