保持单个连接或仅在我需要更改某些内容时打开?

时间:2009-09-01 23:25:35

标签: c# .net wpf connection sql-server-express

我在家里的服务器上有一个SQL服务器(这是一个1GB内存的Atom处理器),我用它来存储我的一个或两个应用程序的数据。我想知道我是否应该在程序启动时创建一个DataContext对象,然后在应用程序的整个生命周期中保持它,或者只在必要时创建连接。如果应用程序突然死亡会怎么样?连接是否被清理干净?

3 个答案:

答案 0 :(得分:2)

除非您将DataContext对象作为已打开的SqlConnection处理,否则DataContext将在完成数据库操作后自动关闭数据库连接。所以它不会保持连接打开。您可以通过查看Reflector中的DataContext类来查看此内容,也可以阅读ASP.NET MVC Tip #34: Dispose of your DataContext(or Don't)博客文章。因此,即使您的DataContext对象继续存在,也不应该有任何打开的数据库连接。

如果您正在处理DataContext之外的数据库连接并保持打开状态,那么您真的不应该这样做。通常,您应该在需要的时间和地点创建和使用资源,包括DataContext对象。没有任何需求就不需要保持数据库连接打开,关闭它以便它被释放回池中以提供另一个数据库连接请求。正如我所说,如果你让DataContext处理数据库连接,就数据库连接而言,你不需要做任何特别的事情。

如果您的应用程序突然崩溃并终止,那么您应该没问题,因为每次操作都会死亡,包括打开数据库连接和与您的应用程序域关联的基础连接池。

答案 1 :(得分:1)

在您需要时打开数据上下文,并在完成后将其删除 拥有一个全局datacontext意味着你必须将它传递给需要它的所有东西。 (您编写的每个需要数据库访问的方法在其签名中都有一个额外的参数。)

如果您决定对其中一个应用程序进行多线程处理,那么拥有单个全局数据文本也会变得很痛苦。

答案 2 :(得分:0)

您是否查看过.NET中的SQL连接池?看一下http://msdn.microsoft.com/en-us/library/8xx3tyca%28VS.80%29.aspx上的文章。连接池为您处理所有脏工作,并在程序中发生错误后自动清理。它在重新使用连接方面非常有效,因此重新使用连接的开销非常小(在程序启动时创建第一个连接仍具有相同的成本)。对于小型应用程序来说可能有点过头了,但这可能是进入大型项目的好习惯。