我创建在C#.NET程序WinForms应用程序,让我们的技术支持人员可以轻松地对我们产品的SQL Server 2005数据库执行常见任务。该应用程序使用ADO.NET(SqlConnection
)连接到数据库。开发这个应用程序时需要考虑的一个问题是,每次启动一个任务(查询)时,最小化连接/重新连接到数据库的开销。根据我的理解,造成这种开销的主要原因是数据库将AutoClose属性设置为“True”。我很想改变这一点,但不幸的是它不在我的控制之下。我也知道创建数据库连接涉及一些开销,无论如何。我有一个应用程序的工作实现,该应用程序在应用程序的整个生命周期中保持单一连接(除非它曾经以某种方式关闭)。然后我偶然发现了一篇关于connection pooling in ADO.NET的MSDN文章。
阅读了这篇文章后(和其他问题/回答here,here和here)看来,ADO.NET连接池将保持即使我的应用程序已经妥善处理了SqlConnection
对象到数据库的连接。该连接将保留在池中,并可重复使用,直至其闲置一段时间或以其他方式中断。因此,我在应用程序中保持单一连接的工作看起来没有必要,而且肯定比每次需要时创建/处理一个SqlConnection
更危险。
问题:
使用ADO.NET连接与“自动关闭”的SQL Server数据库设置为“真”时,池意味着什么存在?
我意识到当我描述我是如何相信Connection Pooling在幕后工作时,我可能会过于简单化,但除此之外,我的理解是否准确?如果不是,它需要更正哪里?
我完全同意AutoClose应该被关闭。不幸的是,我对这个决定没有控制力或影响力。 – dcharles 2009-08-13 23:09:22
我会做什么,而不是依靠合并浮点行为(即当连接退出时,* current *数据库是什么),我会在应用中保持打开一个非常明确的连接,仅用于此目的。也就是说,无论谁拥有“影响力和控制力”,都可能会注意到有人正在保持其亲爱的数据库的开放性,并且随身携带叉子和手电筒。 – 2009-08-13 23:27:08
感谢您的帮助! – dcharles 2009-08-15 07:12:06