8

以下两种方法中哪一种具有更好的性能?

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

要不就 :

DB_Connection_s.Close();

在最后。

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

4

4 回答 4

7

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

于 2012-07-12T09:04:51.360 回答
5

当您在连接上调用 Close 或 Dispose 时,连接会被释放回池中...

来源 = SQL Server 连接池 (ADO.NET)

因此,无需担心因错过池连接而导致性能损失。
从代码的角度来看,差异应该很小,以至于using应该始终使用该语句

于 2012-07-12T09:07:18.350 回答
1

使用处置。在 Dispose 内部,它将关闭连接,因此您无需担心,如果有疑问,可以使用 Reflector 或类似工具轻松检查。

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

于 2012-07-12T09:01:42.193 回答
1

除非你很快要再次调用 .Open() ,

使用using(){}块。

如果您打算很快在其他地方使用相同的连接,
请调用.close(); then .open()等等...
保持您的类实现IDisposable并在那里处理连接!

创建 Connection 对象仍然需要时间

于 2013-07-03T08:50:53.707 回答