C# 当应用程序关闭时,DB连接会立即关闭吗?

C# 当应用程序关闭时,DB连接会立即关闭吗?,c#,entity-framework,ado.net,database-connection,C#,Entity Framework,Ado.net,Database Connection,这是我一直想知道的。。。。会吗 因为每当我编写使用DB连接的代码时,我总是要确保在进程进入下一个部分之前关闭连接 但是如果我有一个ChildWindow,它在构造函数中打开一个连接,在点击Save按钮或Cancel按钮之前不关闭它。那么如果整个应用程序都关闭了,DB连接会立即关闭吗?或者它必须等待超时并自动关闭 编辑: 因此,我尝试保持一个实时连接打开,以便记录应用程序中的所有错误: public App() { ErrorHelper errorHelper = new ErrorHe

这是我一直想知道的。。。。会吗

因为每当我编写使用DB连接的代码时,我总是要确保在进程进入下一个部分之前关闭连接

但是如果我有一个ChildWindow,它在构造函数中打开一个连接,在点击Save按钮或Cancel按钮之前不关闭它。那么如果整个应用程序都关闭了,DB连接会立即关闭吗?或者它必须等待超时并自动关闭

编辑:

因此,我尝试保持一个实时连接打开,以便记录应用程序中的所有错误:

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相似。在这种情况下,它会一直保持连接打开。但是DB连接退出后会立即关闭吗?

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

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

然后你就不必担心了——当它超出范围时,不管是方法结束、异常还是应用程序关闭,它都会关闭。

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

using (var db = new Connection())
{
    ...
}
然后您就不必担心了——当它超出范围时,不管是方法结束、异常还是应用程序关闭,它都会关闭

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

这就是连接池的用途。你有没有衡量过你的表现,或者你有没有找到有力的证据证明这是一个问题

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

如果进程退出,则连接将关闭

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

这就是连接池的用途。你有没有衡量过你的表现,或者你有没有找到有力的证据证明这是一个问题

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


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

@Oded,我没有看到任何关于退出应用程序行为的假设。@Oded根据请求,我放入了我正在处理的内容。但正如mikerobi所说,我想知道退出应用程序的行为。不是确保连接关闭的解决方法。@Oded,我没有看到任何关于退出应用程序行为的假设。@Oded根据请求,我放入了我正在处理的内容。但正如mikerobi所说,我想知道退出应用程序的行为。不是确保连接紧密的解决方法。是的,但不是回答问题。但是你的问题不清楚-你想实现什么?知道连接是否会关闭?知道连接何时关闭?你告诉@Oded你的问题不是假设性的。具体点。@OferZelig我只想知道如果应用程序关闭,所有打开的数据库连接将立即关闭?因此,我不必担心数据库连接是否有可能保持很长时间。假设应用程序由1000个用户运行,如果在应用程序退出后连接不会立即关闭,而是等待一段时间超时并关闭。有可能会保留许多未使用的连接。对不起,也许有些人会认为我把问题复杂化了。但我只是想弄清楚会发生什么。我认为这取决于你的应用程序在IIS下是如何运行的-是否在自己的应用程序池中,等等。可以肯定的是,ADO.NET处理清理,因此最终迟早会关闭并删除所有连接,即使在连接池中也是如此。是的,但是没有回答这个问题。但是你的问题不清楚-你想完成什么?知道连接是否会关闭?知道连接何时关闭?你告诉@Oded你的问题不是假设性的。具体点。@OferZelig我只想知道如果应用程序关闭,所有打开的数据库连接将立即关闭?因此,我不必担心数据库连接是否有可能保持很长时间。假设应用程序由1000个用户运行,如果在应用程序退出后连接不会立即关闭,而是等待一段时间超时并关闭。有可能会保留许多未使用的连接。对不起,也许有些人会认为我把问题复杂化了。但我只是想弄清楚会发生什么。我认为这取决于你的应用程序在IIS下如何运行——是否在它自己的应用程序池中,等等。可以肯定的是,ADO.NET处理清理,所以最终迟早会关闭并删除所有连接,即使在连接池中也是如此。使用block基本上就是尝试{…}最后{obj.Dispose}。我记得我在美国的时候
g NexusDByeah,不出名,每次我写的时候用ADO打开连接比一次打开连接写所有东西慢得多。@King Chan ADO.NET有连接池@我明白了。看完之后。我只是写了一个小程序来测试与MsSQL的ADO开放连接的性能,并在需要时打开。大致相同。奇怪…那为什么我用NexusDB测试的速度要慢得多+1使用块基本上就是尝试{…}最后{obj.Dispose}。我记得当我使用NexusDByeah时,并不出名,每次我写ADO的开放连接都比一次打开连接写所有东西慢得多。@King Chan ADO.NET有连接池@我明白了。看完之后。我只是写了一个小程序来测试与MsSQL的ADO开放连接的性能,并在需要时打开。大致相同。奇怪…那为什么我用NexusDB测试的速度要慢得多+1.