保持与DB的一个连接或根据需要打开关闭

时间:2011-06-01 06:17:15

标签: .net sql-server database oracle sql-server-2005

我在以下案例中寻找最佳做法,并说明为什么每种方式都更好。

我有一个DB,大约有10~20个客户端应用程序连接到一个主DB服务器。

在极少数情况下,每分钟可以有大约200个来自一个客户端到数据库的呼叫。

应用程序是多线程的,每个应用程序大约有20个线程。

这里最佳做法是每个应用程序只保留一个与数据库的连接,并按应用程序重复使用。或者按需要打开新连接并快速关闭它们。

我们正在使用oracle和sql-server。

3 个答案:

答案 0 :(得分:3)

.NET oracle提供程序具有内置的连接池功能。每当您需要数据库连接时,请创建一个新的连接,然后立即释放它。连接池将有效地重用连接。

释放连接的最佳方式是通过using构造,即使发生异常,也会确保连接处置。

using(OracleConnection connection = ConnectionFactory.Create())
{
    connection.DoStuff();

} //connection.Dispose() called here.

答案 1 :(得分:1)

最佳做法是尽快处理连接。技术上连接不会被关闭,只是返回到池中,并将被其他线程重用。

SQL Server Connection Pooling (ADO.NET)

来自MSDN:

  

我们强烈建议您永远   你什么时候关闭连接   完成后使用它   连接将返回到   池。你可以使用   关闭或处理方法   连接对象,或通过打开全部   using语句中的连接。

答案 2 :(得分:0)

最终是关于你需要限制连接的地方(如果有的话)。 在纯Web应用程序中,您不能冒几千人同时点击POST的风险。另一方面,内部业务应用程序可能只有六个用户。

您的数据库可以应对20个客户端,每分钟拨打200个电话吗?单独的线程是否会对数据库进行并行调用?

我倾向于每个客户都有自己的连接池。

是否有一些客户比其他客户更重要?如果是这样,那么您可能希望一个客户端具有20个连接而其他客户端具有10个连接。

任何体面的数据库设置都应该能够处理几百个连接,如果它们都尝试一次ping,就不会摔倒。