データベース接続解除の問題
「すべてのプールされた接続を使用していたと最大プールサイズに達したためタイムアウトは、タイムアウト期間が満了している。有効期限が切れますが、プールから接続を取得するためには至っていない。これが発生した可能性があります。」
外観は、データベース接続プールがいっぱいですそれは、オープンのリリースには、理由はないはずですが、私はどのようにこれが起こるのだろう、タイムリーにリリース使用してConnectionオブジェクトを使用する必要がありますか?それは長い時間がかかったし、最終的理由、その記録、それを書き留めて。
詳細ヒント:
- 接続SQLデータベースクエリデータベース直接実行:() SELECT [ 12月] .client_net_address、 [ DES ]。[ Program_nameの] 、 [ DES ]。[ HOST_NAME ] 、 カウント([ 12月] .session_id)AS connection_count FROM SYS .dm_exec_sessions AS [ デ] INNER JOIN sys.dm_exec_connections AS [ 12月オン] ON [ デ].session_id = [ 12月] .session_id GROUP BY [ 12月] .client_net_address、 [ DES ]。[ program_nameの] 、 [ DES ]。[ HOST_NAME ] ORDER BY [ デ]。[ program_nameの] 、 [ 12月]。[ client_net_address ]
商品コード:
//连接对象的创建工厂类 パブリック クラスのConnectionFactory { プライベート 静的 読み取り専用 文字列 CONNSTRING = ConfigurationManager.ConnectionStrings [ " SQLServerDatabase " ] .ConnectionString。 パブリック 静的のIDbConnectionのCreateConnection() { のIDbConnection CONN = 新しいSqlConnectionオブジェクト(CONNSTRING)。 conn.Open(); 返すCONN; } } // UserInfoDAL类 パブリック クラスUserInfoDAL:IDAL.IUserInfoDAL { プライベートのIDbConnection _conn。 公共のIDbConnectionコネティカット { 取得 { // 工厂实例化一个连接对象 戻る _conn = ConnectionFactory.CreateConnection(); } } // 根据ID获取エンティティ 公共のUserInfo GetEntity(文字列ID) { 使用(コネチカット)を { 文字列クエリは= " UserInfo_id = @UserInfo_idのUserInfo SELECT * FROM " 。 // 使用Dapperの リターンユーザー情報= Conn.Query <のUserInfo>(クエリ、新しい {UserInfo_id = ID})SingleOrDefault()。 } } }
コードは、基本的には上記の形で、それで間違っては何もないようです。ここではそれをデバッグします。
最初のユニットテストを作成します。
【のtestMethod】 公共ボイドTestConnectionCount() { SQLServerDAL.UserInfoDAL userInfoDAL =新しいSQLServerDAL.UserInfoDAL()。 Model.UserInfoユーザー情報= userInfoDAL.GetEntity( "3")。 ユーザー情報= userInfoDAL.GetEntity( "3")。 ユーザー情報= userInfoDAL.GetEntity( "3")。 ユーザー情報= userInfoDAL.GetEntity( "3")。 }
その理由は、不適切な使用の発見を得るために、彼らは単に現在の解決策を得ることはありませんです。
public class UserInfoDAL:IDAL.IUserInfoDAL { public IDbConnection Conn; public UserInfo GetEntity(string id) { using (Conn=ConnectionFactory.CreateConnection()) { string query = "select * from UserInfo where UserInfo_id = @UserInfo_id"; return Conn.Query<UserInfo>(query, new { UserInfo_id = id }).SingleOrDefault(); } } }