【问题标题】:When application close, will DB connection close instantly?当应用程序关闭时,数据库连接会立即关闭吗?
【发布时间】:2012-03-21 19:45:53
【问题描述】:

这是我一直想知道的……会吗?

因为每当我编写代码以使用数据库连接时,我总是必须确保在处理下一个片段之前关闭。

但是,如果我有一个 ChildWindow,它在其构造函数中打开一个连接并且在它点击保存按钮或取消按钮之前不关闭它。那么如果整个应用程序关闭,数据库连接会立即关闭吗?还是必须等待超时自动关闭?

编辑:

所以我试图保持实时连接打开以记录我的应用程序上的所有错误:

public App()
{

   ErrorHelper errorHelper = new ErrorHelper(); // Will open DB connection
   AppDomain currentDomain = AppDomain.CurrentDomain;
   currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);

}

/// <summary>
/// For catch all exception and put them into log
/// </summary>
void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{

    errorHelper.WriteError(e.ExceptionObject as Exception);            

}

因为我不喜欢每次记录单个错误时打开连接的方式,所以我想一直保持连接打开。这与我描述的 OP 相似。在这种情况下,它始终保持连接打开。但是数据库连接退出后会立即关闭吗?

【问题讨论】:

  • @Oded,我没有看到任何关于现有应用程序行为的假设。
  • @Oded 按照要求,我放了一些我正在做的事情。但就像 mikerobi 说的,我想知道退出应用程序的行为。不是确保连接关闭的解决方法。

标签: c# entity-framework ado.net database-connection


【解决方案1】:

简短的回答:始终在using 语句中使用您的连接:

using (var db = new Connection())
{
    ...
}

然后您就不必担心了 - 它会在超出范围时关闭,无论是方法结束、异常还是应用程序关闭。

【讨论】:

  • 正确,但没有回答问题。
  • 但您的问题并不清楚 - 您想要完成什么?知道连接是否会关闭?知道连接何时关闭?你告诉@Oded 你的问题不是假设的。具体一点。
  • @OferZelig 我只想知道如果应用程序关闭,所有打开的数据库连接会立即关闭吗?所以我不必担心数据库连接是否有可能保持很长时间。 (假设应用程序有 1000 个用户运行,如果应用程序退出后连接不会立即关闭,而是等待一段时间超时关闭。有可能会保留许多未使用的连接。)对不起,也许有人会认为我把问题复杂化了。但我只是想清楚会发生什么。
  • 我认为这取决于您的应用程序如何在 IIS 下运行 - 在其自己的应用程序池中,等等。可以肯定的是 ADO.NET 处理清理,所以最终(迟早)所有连接将被关闭并删除,即使在连接池中。
【解决方案2】:

因为我不喜欢每次记录单个错误时打开连接的方式,所以我想一直保持连接打开。

这就是连接池的用途。您是否衡量过自己的表现,或者您是否发现了强有力的证据表明这是一个问题?

使用using 块打开和关闭连接,让连接池完成它的工作。

如果您的进程退出,您的连接将被关闭。

【讨论】:

  • Using 块基本上只是try{...}finally{ obj.Dispose() }。我记得我在使用 NexusDB 的时候(是的,不是很有名),每次编写时都打开 ADO 连接比打开连接一次并编写所有内容要慢得多。
  • @King Chan ADO.NET 具有连接池。 msdn.microsoft.com/en-us/library/8xx3tyca.aspx
  • @dotjoe 哦,我明白了。读完之后。我刚刚写了一个小程序来测试 ADO 始终打开连接(使用 MsSQL)的性能,并在需要时打开。它差不多。奇怪……那我用 NexusDB 测试的时候怎么会慢很多……+1
猜你喜欢
  • 2021-01-02
  • 2010-09-26
  • 2019-01-27
  • 2016-02-10
  • 1970-01-01
  • 2012-08-06
  • 2014-06-14
  • 2010-12-01
  • 2020-09-22
相关资源
最近更新 更多