문제

데이터베이스와 함께 많은 읽기/쓰기를 수행하는 .NET 객체가 있습니다. 이 객체의 수명주기 (또는이를 사용하는 ASP 페이지) 동안 1 ~ 10 배의 쿼리/업데이트로 데이터베이스에 도달 할 수 있습니다.

객체가 데이터베이스에 도달해야 할 때마다 데이터베이스 연결을 열고 닫는 대신 인스턴스화 중에 데이터베이스에 대한 연결을 엽니 다 다음 객체 종료 이벤트 중에 연결을 닫습니다. 그게 나쁜 연습입니까?

객체가 데이터베이스가 인스턴스화 될 때마다 (일반적으로 여러 번) 데이터베이스에 도달하기 때문에 객체의 수명 시작시 연결을 열고 끝에서 닫는 것이 좋습니다.

다른 대안은 각 쿼리/작업 전후에 데이터베이스 연결을 열고 닫는 것입니다.

성능을 극대화하기 위해 여기서 가장 모범 사례는 무엇입니까?

**** 업데이트 **** 팁을 주셔서 감사합니다. 누구든지 객체의 인스턴스화/종료 이벤트 내부의 연결을 열고 닫는 방법에 대해 더 말할 수 있습니까?

도움이 되었습니까?

해결책

필요에 따라 연결을 닫습니다. Ado.net은 작동하는 풀링에 내장되어 있습니다. 수천 개의 열린 개방/닫기가있는 루프 에서이 작업을 수행하지 않는 한 성능 문제를 알 수 없습니다.

편집하다보다 데이터 액세스 계층에서 SQLConnection을 지속해야합니까? 연결 지속성의 함정에 대한 자세한 내용.

다른 팁

매번 열고 닫으십시오 ... 실제 코드 라인 전에 즉시 (가능한 한 가깝게) 데이터베이스 작업을 수행하고 최대한 빨리 닫습니다. 이런 식 으로이 작업을 수행하면 Ado.net은 실제로 연결을 닫지 않으며 ADO.NET 연결 풀로 다시 공개합니다. 여기서 동일한 Conenction 문자열과 연결을 위해 다음 요청을 기다립니다. 당신은 매번 연결을 실제로 재현하는 ovberhead를 발생시키지 않습니다 ...

유일한 문제는 수영장에서 최대 연결 수를 초과하여 많은 연결 시도를 비동기로 수행하는 경우 시스템을 사용 하여이 문제에 대한 솔루션이 있습니다 .threading.threadpool 클래스 ...

연결 풀링 인수에 대한 신뢰에 추가하려면 - 필요 이상으로 연결을 열어 놓을 수 있습니다. 감소하다 연결 풀이 DB 연결이 필요한 다른 구성 요소와의 연결을 공유 할 수 없으므로 전반적인 성능.

그렇습니다. 필요에 따라 연결을 열고 닫으십시오. 그러나 쿼리를 단일 exec 호출로 배치 할 수 있다면 훨씬 빠릅니다.

ado.net이 실제로 연결을 닫지 않더라도, 당신이 할 때 : conn.close ()는 서버에서 "sp_reset_connection"을 실행합니다. 예를 들어, 루프 내부에 연결을 닫고 열지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top