2012-07-12 137 views
7

以下哪两种方法具有更好的性能?配置连接或关闭连接

using(var DB_Connection_s = new DBConnection()) 
{ 
//todo: interact with database connection 
} 

或者只是:

DB_Connection_s.Close(); 

末。

第一种方法是否使池化概念无用?因为如果我在每次使用时都处理连接,那么每次都必须打开一个新连接(并且池中不会有任何连接)。

+0

Dispose将关闭以及清除其他任何资源。 – Oded 2012-07-12 09:02:59

+1

我知道,我问是否这种表现明智地杀死连接,然后什么是pooing的好处?! – 2012-07-12 09:03:48

+0

因为我知道什么时候我只是关闭连接。它仍然在池中,并使用,如果它不活跃。 – 2012-07-12 09:05:21

回答

5

连接被释放回当你调用Close或Dispose连接在泳池...

源= SQL Server Connection Pooling (ADO.NET)

所以,删除有关造成错过汇集性能损失任何担心连接。
从代码的角度来看,差别应该是这样最小的using声明应始终使用

+0

嗯,这是否意味着如果我处置连接,它将保持在池中。那么什么是关闭() &Dispose()。如果它们都将连接返回到池。 – 2012-07-12 09:36:09

+0

[MSDN]上的这篇文章(http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/f7d1fc91-2829-4835-9021-63b7353dd481)讨论了这两种方法之间的区别。从'BinaryCoder'读取答案 – Steve 2012-07-12 09:48:34

1

使用Dispose。在Dispose内部,它将关闭连接,所以您不必担心,如果有疑问,可以使用Reflector或类似的方法轻松检查。

至于表现,我仍然会去使用。 Windows启用了各种缓存(当然在ODBC中)以确保重复请求可以发生到同一连接,因此您不必担心性能。

+0

我知道,我问是否这种表现是明智的,每次都会消除连接,然后pooing有什么好处?! – 2012-07-12 09:03:20

+0

对不起 - 我的不好,更新我的回答 – Ian 2012-07-12 09:09:32

7

using模式更好,因为无论如何Dispose调用会关闭连接,但作为奖励,即使使用内部出现错误,连接也会关闭。例如一个异常或只是一个强制程序执行超出使用范围的返回。通过使用,您不需要显式关闭连接,这使代码更具可读性。 作为另一种模式,连接必须尽快关闭。在频繁关闭/打开连接时没有性能缺陷,因为连接池将优化为您重新使用的连接。

+0

嗯,这是否意味着如果我处置连接,它将保持在池中。 – 2012-07-12 09:28:09

+1

@just_name,是关闭和处置都没有区别:关闭的连接只是关系到池 – 2012-07-12 10:01:10

+0

和处置的连接也释放到池.am我是吗? – 2012-07-12 10:02:45

1

除非你要叫。开()再次不久的某个时候,

使用using(){}块。

,如果你马上就要别的地方使用相同的连接,
呼叫.close();然后.open()等等...
使你的类实现IDisposable有连接的处置!

创建Connection对象仍需要时间