MySql连接,我可以把它打开吗?

时间:2009-11-10 12:22:55

标签: c# mysql connection

在整个会话期间保持连接打开是否明智? 我创建了一个连接到MySql数据库的C#应用​​程序,该程序读取和写入它,并且应用程序必须每天运行大约10个小时不间断。

每次从数据库中提取内容并在需要新内容后再次打开时,是否存在保持连接打开而不是调用close()函数的风险?

11 个答案:

答案 0 :(得分:9)

只要打开连接一段时间就可以了:

  1. 您没有那么多并发空闲连接,而是达到MySQL连接限制;

  2. 你没有做任何事情就不会让它开放小时。默认的MySQL连接wait_timeout是8小时;保持连接长时间不活动,当你下次使用它时,你会得到一个“MySQL服务器已经消失”的错误。

答案 1 :(得分:9)

由于您使用的是ADO.NET,因此可以使用ADO.NET内置的连接池功能。实际上,让我改进一下:您必须始终使用ADO.NET的内置连接池功能。通过这样做,您将使.NET运行时在后台透明地管理您的连接。即使您关闭它们并在打开新连接时重复使用它,它也会保持连接打开一段时间。这真的很快。

请务必在连接字符串中提及您想要池化连接,因为它可能不是默认行为。

您只需要在需要时在本地创建连接,因为它们是在backrgound中汇集的,因此创建新连接没有任何开销:

using (var connection = SomeMethodThatCreatesAConnectionObject())
{
    // do your stuff here
    connection.Close(); // this is not necessary as
                        // Dispose() closes it anyway
                        // but still nice to do.
}

这就是你应该如何在.NET中完成它。

答案 2 :(得分:0)

如果应用程序正在使用该连接,则没有理由将其关闭。如果您不需要连接,则应将其关闭。如果您要将多个应用程序连接到数据库,则您具有到该数据库的固定数量的连接。这就是为什么最好在完成后关闭并在需要时重新打开。

答案 3 :(得分:0)

从安全的角度来看,我会说在查询后关闭它会更好,只是为了确保没有其他程序可以将它自己的东西注入打开的连接中。

随着性能的提升,在整个时间内打开连接显然会更好。

您的选择^^

答案 4 :(得分:0)

不,我没有看到为什么不打开连接并重新使用它的任何理由:毕竟,这是各种连接池技术背后的全部要点(尽管这些通常是为多线程情况,其中的工作都在同一数据源上运行。)

但是,要扩大bobince的答案, - 只是因为你没有关闭连接,不要认为别的东西不会:连接可能超时,可能存在连接问题或者一百零一个其他问题你的连接死亡的原因。您需要假设连接可能不存在,并为此异常情况的代码添加逻辑。

答案 5 :(得分:0)

我认为保持联系开放并不是一个好习惯。 每次关闭连接的另一个方面是可扩展性。现在可以将它保持打开状态,但是如果你的应用程序被用户使用量的两倍,那该怎么办呢。回到原点并改变所有代码是痛苦的。 (我知道我已经做到了: - )

答案 6 :(得分:0)

如果在代码中使用连接池,则问题将得到解决。您无需打开和关闭连接,因此可以节省打开连接时使用的宝贵资源。您只需将连接返回到池,当请求连接时返回空闲连接。

当然我认为,获取连接的实例,使用它,提交/回滚您的工作并将其返回到池中。我不建议保持连接打开这么久。

答案 7 :(得分:0)

我在其他答案中没有看到一件事:如果您准备好了语句或临时表,他们可能会阻止服务器资源,直到连接关闭。但另一方面,将连接保持一段时间而不是每隔几分钟重新创建它们会很有用。

答案 8 :(得分:0)

如果您经常打开和关闭连接,您将支付性能损失。如果您担心应用程序的运行副本太多会占用太多数据库连接,那么使用连接池和简短wait_timeout可能是明智之举。

答案 9 :(得分:0)

是的,你可以,提供:

  • 如果断开连接,您将重新连接
  • 如果发生奇怪的事情,您可以重置连接状态
  • 您将检测连接是否“安静”,例如,如果发生防火墙超时

基本上,它需要对失败案例和正确的恢复进行大量关注;连接和断开通常要容易得多。

答案 10 :(得分:0)

我认为,如果存在连接池机制,则最好关闭连接。

这样做的一个原因是您无需重新检查您的连接是否仍然存在。