나는 SqlConnection 개체를 인스턴스화하면 연결 풀에서 실제로 연결을 잡는 것을 이해합니다. Open()을 호출하면 연결이 열립니다. 해당 SqlConnection 개체에 대해 Close() 또는 Dispose() 메서드를 호출하면 연결 풀로 반환됩니다.연결 풀링을 사용하는 동안 SqlConnection을 실제로 닫으려면 어떻게해야합니까?
그러나 실제로 닫혀 있는지 또는 데이터베이스에 여전히 활성 연결이 있는지는 알 수 없습니다.
SqlConnection을 네트워크 수준에서 강제로 닫거나 적어도 닫을 때 알려주려면 어떻게해야합니까?
예 :
using(SqlConnection conn = new SqlConnection(DBConnString)) {
conn.Open();
SqlCommand cmd = conn.CreateCommand();
...
cmd.ExecuteReader(CommandBehavior.CloseConnection);
...
}
- 먼저 실행 : 300 MS
- 두 번째 실행 : 100 밀리
- 세 번째 실행 : 오랜 시간 대기 후 100 밀리
- 을 (30 분) : 300 ms
if 연결은 참으로 닫았고 두 번째 및 세 번째 실행은 300ms 여야합니다. 하지만 그 연결이 SQL Server의 활동 모니터를 확인한 실행에 대해 실제로 닫히지 않았 음을 알고 있습니다. 인증 등을 수행하기 위해 여분의 200ms가 필요하지 않습니다.
어떻게 연결을 강제로 닫으시겠습니까?
아이디어
- 합니까 위해 CommandBehavior.CloseConnection 일? (분명히 아니?)
- 연결 문자열에서 "Max Pool Size = 0"설정이 작동합니까? (이것은 pyrrhic 솔루션이 될 것입니다)
- Dispose() 작동합니까?
- 제는 여기 Close() doesn't really close 연결하는 것이 우리에게 또 다른 하나입니다.
- pros and cons connection pooling
처음 응답자가 질문을 올바르게 읽으려면 +1. – Joe
나는이 일을하고 있지만 내 SQL 연결은 여전히 sp_who2에 나타나고 SQL 세션 보유 AppLocks는 잠긴 상태로 유지됩니다 (연결로 인해 죽을 것이라고 생각합니다). 나는 심지어 [''connStrBuilder.Polling = false'] (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close (v = vs.110) .aspx)를 설정합니다. –