2016-07-27 2 views
1

내 회사의 ASP.NET 웹 응용 프로그램 중 하나가 SQL Server 2008 R2 데이터베이스에 연결되어 데이터를 읽거나 쓰지 만 코드의 일부에서는 SqlConnection.Close()SqlConnection.Dispose()이 연결을 사용한 후에 절대로 호출되지 않습니다. MSDN에서 SqlConnection.Close() 또는 SqlConnection.Dispose()가 호출되지 않으면 어떻게됩니까?

, SqlConnection Class :

SqlConnection이 범위를 벗어나 있다면, 그것은 닫히지 않습니다. 따라서 Close 또는 Dispose를 호출하여 명시 적으로 연결을 닫아야합니다.

나는 sp_who을 사용하며 웹 응용 프로그램을 통해 일부 데이터베이스 액세스를 수행함에 따라 점점 더 많은 연결이 생성된다는 것을 알게되었습니다. 그러나 몇 분 후 일부 연결이 끊긴 것 같습니다.

SqlConnection.Close()SqlConnection.Dispose()이 호출되지 않는 경우를 처리하기 위해 .Net 런타임이 있습니까? 성능과 안정성에 영향을 미치는 잠재적 인 문제가 있습니까?

+1

아마도 대안 인'using' 문으로 래핑됩니다. – user3185569

+1

닫기뿐만 아니라 Dispose를 호출 할 수도 있습니다. 이는이 연결이 닫히고 처리됨을 의미합니다. 올바른 패턴은 항상 "using (SqlConnection ....) {...}"을 사용합니다. –

+4

결국 이들은 가비지 컬렉터에 의해 처리되지만 이것이 문제를 무시해야한다는 것을 의미하지는 않습니다. 연결을 열린 채로두면 모든 고스트 연결에 대해 서버가 자체 리소스를 사용하게되며로드가 많은 서버에서 큰 문제가 될 수 있습니다. 모든 연결 개체 주변에서 using 문을 사용하려고 시도하십시오. – Steve

답변

0

정상적으로 진행되며 잠시 동안 오류가 발생하지 않습니다. 응용 프로그램이 실행될 때마다 SQL 연결을 열고 닫을 때마다 새 SQL 연결을 열려고하면 SQL 연결 풀이 가득 차고 시스템에서 연결 풀 오버플로 오류가 발생합니다.

그래서 항상 함수 내에서 연결을 가까운 코드로 유지하십시오.

관련 문제