문제

예를 들어 SQLDataAdapter의 fill () 메소드로 많은 데이터 레이스를 채워야합니다.

DataAdapter1.Fill(DataTable1);
DataAdapter2.Fill(DataTable2);
DataAdapter3.Fill(DataTable3);
DataAdapter4.Fill(DataTable4);
DataAdapter5.Fill(DataTable5);
....
....

모든 DataAdapter 객체도 동일한 SQLConnection을 사용합니다. 메서드 호출 전에 연결 상태가 이미 열리지 않는 한 각 채우기 메소드가 연결을 닫고 닫습니다.

내가 알고 싶은 것은 불필요하게 SQLConnection을 불필요하게 열고 닫는 것이 응용 프로그램의 성능에 어떤 영향을 미치는지입니다. 이 문제의 나쁜 영향을 보려면 얼마나 많은 규모가 필요합니까 (동시 사용자의 100,000). 미드 사이즈 웹 사이트 (매일 50000 명의 사용자)에서 모든 fill () 호출을 귀찮게하고 검색하여 코드에 함께 보관하고 채우기 () 호출을 시작하기 전에 연결을 열어야합니까?

도움이 되었습니까?

해결책

Ado.net에는 연결 풀링이 있습니다. 예를 들어 연결을 닫을 때는 실제로 완전히 닫히지 않지만 정확히 동일한 연결 문자열로 새 연결을 요청하면 "재활용"합니다.

그럼에도 불구하고 - 당신이 이미 있다면 알다 이 다섯 개의 채우기 방법을 하나씩 호출 해야하는 경우 미리, 나는 확실히 추천 할 것입니다.

  • 연결 열기
  • 데이터베이스에서 5 개의 데이터 테이블을 모두 읽습니다
  • 연결을 다시 닫습니다

이런 식으로 그렇게하는 것이 모범 사례가 받아 들여졌습니다. 그것은 당신을 해치지 않습니다. 그래서 그냥하십시오! :-)

마크

추신 : Ado.net의 연결 풀링은 물론 끄지 않은 경우에만 작동합니다! :-) 기본적으로 켜져 있습니다. 명시 적으로 비활성화해야합니다.

다른 팁

핵심:

  • 연결을 열고 유지하고 재사용하는 이유는 무엇입니까?

    성능

연결을 열고 닫으려면 여러 가지 이유가 있습니다. 최고의 트레이드 오프가 어디에 있는지 결정해야합니다. 당신의 사용. 두 가지 모두를 수행 할 수 있습니다. 일정 기간 동안 열린 연결을 사용하거나 정해진 수의 트랜잭션을 사용한 다음 닫고 새 트랜잭션을 열 수 있습니다.

SQL 연결을 열고 닫습니다 값비싼 데이터베이스의 다른 간단한 작업과 비교할 때. 그러나 만약 당신의 실제 작업은 이미 시간이 많이 걸리고 추가 오버 헤드가 눈에 띄지 않을 수 있습니다 (실제 작업의 대기 기간을 이미 숨기고있는 경우 사용자는 재 시도와 같은 물건을 무작위로 클릭하지 않습니다).

테스트 케이스 :

당신은 측정 할 수 있습니다 당신의 테스트 쿼리의 두 버전을 작성하여 차이. 간단한 SQL 작업을 선택하십시오 (필요합니다. 같은 각 버전에서).

버전으로 하나, 단일 일정한 개방형 연결로 수행하십시오 밖의 루프는 간단한 작업 x를 통해 루핑을 x 횟수로 횟수입니다.

에서 , 연결의 개방 및 닫기로 수행하십시오. 내부에 루프.

일치 할 x 횟수를 변경하십시오 당신의 사용 및 기대. 그것은 당신에게 영향에 대한 진정한 좋은 느낌을 줄 것입니다. 당신의 체계.

기본 사항을 이해하는 데 도움이되기를 바랍니다 ... Jack.

NECRO 답변 : 가장 좋은 방법은 '사용'명령문에 연결을 배치하여 필요한 작업에 비추도록하는 것입니다.

using (SqlConnection conn = new SqlConnection())
{
    DataAdapter1.Fill(DataTable1);
    DataAdapter2.Fill(DataTable2);
    DataAdapter3.Fill(DataTable3);
    DataAdapter4.Fill(DataTable4);
    DataAdapter5.Fill(DataTable5);
    ...
    ...
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top