2016-04-24 19 views
0

私は、接続を確認し、コードで使用できます:オープン接続の待ち時間を減らす方法は?

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; 
     } 

接続できない、それは.howがそれを減らすことができます答えるために長い時間がかかりますか?あなたのSQL Serverに接続している場合

+0

TCPプロトコルを使用して接続している場合、サーバーが単純なpingに応答して、実際のTCP接続を開始する前に代わりに使用するように設定されていると試すことができます。私はあなたのクライアントがネットワーク接続を行っていると仮定します。 – rene

+0

私は構成サーバーにアクセスできません。 – shahroz

答えて

1

時間がかかることはありません。私のボックスでは、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トラフィックがので、このオプションは、すべてのサーバーのために動作しない場合があります。

1

は、SQL接続をこのように確認することができ、これはあなたが最初Pingにサーバーを試すことができます

 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; 
     } 
+0

objConnection.Stateは開いていないので閉じています! – shahroz

+0

オープンしていない場合はチェックする必要はありません。開いてみると失敗した場合は、再接続しようとすると時間がかかるでしょう。 – Mostafiz

+0

どうすればこの時間を短縮できますか再接続のために)?出来ますか? – shahroz

1

Do not ClearAllPools!接続プールは、接続をより効率的にするために特別に用意されています。 Open()プールからの接続が使用されている場合(存在する場合) Close()プールに戻されても破壊されず、誰かがもう一度それを使用するのを待っています。

関連する問題