【发布时间】:2009-08-13 22:52:13
【问题描述】:
设置:
我正在用 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 连接池与“AutoClose”设置为“true”的 SQL Server 数据库一起使用时会产生什么影响?
我意识到,当我描述我认为连接池如何在幕后工作时,我可能过于简单化了,但除此之外,我的理解准确吗?如果没有,哪里需要修正?
【问题讨论】:
标签: c# .net sql-server ado.net connection-pooling