如何减少开放连接的等待时间?

时间:2016-04-24 11:05:29

标签: c# database-connection

我检查连接是否可用代码:

 SqlConnection objConnection = new SqlConnection(string.Concat(connectionString));
        try
        {
            objConnection.Open(); // this line make wait time if connection not available 
            objConnection.Close();
            SqlConnection.ClearAllPools();
            return true;
        }
        catch
        {
            return false;
        }

当连接不可用时,需要很长时间才能回答。如何减少连接?

3 个答案:

答案 0 :(得分:1)

你可以通过这种方式检查sql连接,这不会花费很长时间

        SqlConnection objConnection = new SqlConnection(string.Concat(connectionString));
        try
        {
           objConnection.Open();
        }
        catch {}

        if (objConnection != null && objConnection.State == ConnectionState.Open)
        {
            try
            {
               objConnection.Close();
            }
            catch {}
            return true;
        }
        else if (objConnection != null && objConnection.State == ConnectionState.Closed)
        {
            try
            {
               objConnection.Close();
            }
            catch {}
            return false;
        }

答案 1 :(得分:1)

如果您要连接到SQL Server,可以先尝试Ping服务器。在我的盒子上,ping只需5秒钟就可以得出服务器无法访问的结论。此片段中显示了利用该功能的最简单代码:

if(new System.Net.NetworkInformation.Ping().Send("Your servername here").Status != 
       System.Net.NetworkInformation.IPStatus.TimedOut)
 {
    // server reachable, try a real SQL Server connection now
    SqlConnection objConnection = new SqlConnection(connectionstring);
   try
   {
       objConnection.Open(); // this line make wait time if connection not available 
       objConnection.Close();
       // not sure why you would want this
       // only use if you want worse performance
       // SqlConnection.ClearAllPools();
      return true; 
   }
   catch
   {
       return false; 
   }
}
else 
{
    return false; // PING failed
}

系统管理员可能会禁用/阻止ICMP流量,因此此选项可能不适用于每个服务器。

答案 2 :(得分:1)

不要ClearAllPools!连接池专门用于提高连接效率。当您Open()使用池中的连接时(如果有)。当你Close()将它返回到游泳池但没有被销毁时,只需等待某人再次使用它。