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

How to reduce waiting time for open 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;
        }

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

您可以通过这种方式检查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;
        }

如果您要连接到 SQL 服务器,您可以先尝试 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
}

系统管理员可能 disable/block ICMP 流量,因此此选项可能不适用于所有服务器。

不要ClearAllPools!连接池就是专门用来让连接更有效率的。当您 Open() 使用池中的连接(如果有的话)。当你Close()它返回到池中但没有销毁,只是等待有人再次使用它。