【问题标题】:Dispose the connection or Close the connection释放连接或关闭连接
【发布时间】:2012-07-11 23:55:16
【问题描述】:

以下两种方法哪一种性能更好?

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

或者只是:

DB_Connection_s.Close();

在最后。

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

【问题讨论】:

  • Dispose 将关闭并清理任何其他资源。
  • 我知道,我问这种性能是否明智,每次都会终止连接,然后便便有什么好处?!
  • 因为我知道我什么时候关闭连接。它保留在池中,如果它不活动,则使用它。
  • 你可能想修正那个错字...
  • 常识告诉我 Dispose() 会关闭、清理和释放更多资源,而 Close() 可以让您更快地重新打开?...但我可能错了。跨度>

标签: c# asp.net performance database-connection informix


【解决方案1】:

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

【讨论】:

  • hmmm,这是否意味着如果我处理连接,它将保留在池中。
  • @just_name,是的,关闭和处理都没有区别:关闭的连接只是重新连接到池
  • 并且已释放的连接也被释放到池中。对吗?
  • @just_name 是的,你是对的,dispose 只需调用 close 和 close 即可释放到池中
【解决方案2】:

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

来源 = SQL Server Connection Pooling (ADO.NET)

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

【讨论】:

  • hmmm,这是否意味着如果我处理连接,它将保留在池中。那么 Close() 和 Dispose() 之间的主要区别是什么。如果它们都返回连接回到游泳池。
  • MSDN 上的这篇文章讨论了这两种方法之间的区别。阅读BinaryCoder的答案
【解决方案3】:

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

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

【讨论】:

  • 我知道,我问这种性能是否明智,每次都终止连接,然后便便有什么好处?!
  • 对不起 - 我的错,更新我的答案
【解决方案4】:

除非你很快会再次调用 .Open(),否则

使用using(){} 块。

如果您打算很快在其他地方使用相同的连接,
打电话给.close(); 然后.open() 等等...
让您的班级实施IDisposable 并在那里处理连接!

创建连接对象仍然需要时间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2014-08-06
    • 2013-05-01
    • 2016-10-24
    • 2012-04-22
    相关资源
    最近更新 更多