2017-02-07 9 views
0

WCF applicationに次のエラーが発生しています。C#:最大プールサイズの根本原因に達しました

タイムアウトが切れています。プールから 接続を取得する前にタイムアウト時間が経過しました。プールされたすべての 接続が使用されていて、最大プールサイズに達したために発生した可能性があります。

合計24回の接続がアプリケーションによって消費されたときにエラーが発生したとき、私は100がデフォルトの接続プールサイズだと思います。

私たちはいつもSQL connectionを閉じて、SQLDataReaderを処分します。

この実行がなぜ発生したのかわかりません。このエラーが発生した場合、他の状況はありますか?

+0

すべての使い捨てオブジェクトは、SqlDataReaderだけでなく、最も重要なSqlConnectionも破棄する必要があります。これらのオブジェクトの周りに_usingステートメント_を使用して、それらの適切な処理を実現します。 – Steve

+0

@Steve - 接続とSQLコマンドなどを処理するために "using"ステートメントを使用します。 – Girish

+0

あなたのサービスについてもっと調査し、コードのどこかで.Dispose()メソッドまたはusingステートメントを見逃していません。時々、それは問題を引き起こすことができるちょっとしたループです。 –

答えて

0

私はいくつかのsugestionsがあります。

  1. (あなたが言ったように、これはすでに行われている)/閉じる接続を配置することが正しく、ユーザ/マシンが開かれた接続を維持している
  2. チェックをusingブロック内のすべての接続を実装します。その後

select distinct dbid, DB_NAME(dbid) FROM sys.sysprocesses where dbid > 0

DBIDを交換し、開いているすべての接続を検査するために、このクエリを使用します:データベースIDを識別するために、このクエリを実行

SELECT dbid, DB_NAME(dbid) as DatabaseName, COUNT(dbid) as ConnectionCount, loginame as LoginName 
    FROM sys.sysprocesses 
WHERE dbid = 1 
GROUP BY dbid, loginame 
ORDER BY count(dbid) desc 

これはあなたにいくつかのヒントを与えることができますあまりにも多くの接続を開いている人についてです。

  1. 接続文字列にプールを実装して接続を制限します。 アプリケーションの接続文字列でこれを使用します。

Pooling=true; Min Pool Size=1; Max Pool Size=5

私は、これはあなたを助けることができると思います。

関連する問題