2016-12-12 1 views
0

이 디자인을 여러 번 변경하면서 앞뒤로 가고 있습니다.공유 객체 간의 데이터베이스 연결

나는 두 클래스 Shop & Source,
이 각 ShopIList<Product> (약. 1000 제품),
SourceIList<Item> (약 200)가,
모든 클래스와 동일한 데이터베이스에 어떤 작업을 수행 할 필요가있다 .
을 그리고 내 WebService에을 구축 할 때 (이것은 소리 불량)
나는 오픈 정적 DbConnection 캐시, 문제가되었고, 그것을 사용 :

은 처음에는 모든 객체와 오픈 DbConnection을 공유했습니다.
하지만 연결이 산발적으로 닫히고 ExecuteReader() 던져 (MARS를 사용하지 않은 경우) 여러 요청을 테스트 할 때 문제가 발생하기 시작했습니다.

This과 연결 풀링에 의존하는 많은 다른 출처를 읽은 후.
쿼리하기 바로 전에 연결을 열어 코드를 교체하고 완료되면 처리합니다.
하지만 성능이 저하되는 것을 확인했습니다. 풀이 작동 방법
나는 확인할 수 있습니다 (또는 그렇지?)

질문 : 내도록 SqlConnection 풀을 모니터링 할 수 있습니다?

질문 : 이러한 많은 개체간에이 연결을 공유 할 다른 디자인이 있습니까?

고마워요.

답변

1

성능 저하는 데이터베이스 연결을 관리하는 방법과 관련이 없습니다. 일반적으로 연결을 다시 만드는 것은 비용이 많이 드는 작업이 아니며 .NET에서 사용자를 위해 풀링/관리합니다. 원하는만큼 많은 연결을 생성 할 수 있어야합니다. 제대로 연결했는지 확인하십시오. 기본 질의 또는 고려해야 할 응용 프로그램의 다른 영역에 문제가있을 수 있습니다.

SqlConnection 풀을 어떻게 모니터링합니까?

  • 당신이 볼 수 Performance Counters 있습니다.
  • 이 많은 객체 사이의 연결을 공유하는 다른 설계가 있습니까 perfmon

를 사용하여 살펴보십시오.

연결 문자열을 어떻게 읽으십니까? 그 자체가 정적 일 수 있지만 연결 풀링에 의존합니다 (연구에서 언급 한 것처럼). 연결을 제대로 처리하고 있습니까?

예 (정적 연결 문자열)

public static readonly string ConnectionString connString = ConfigurationManager.ConnectionStrings["YOURCONNECTION"].ConnectionString.ToString(); 

    private void TestMethod() 
    { 
     using (var dbConn = new SqlConnection(connString)) { 
      string query = "select ...."; 
      using (var dbCommand = new SqlCommand(query, dbConn)) { 
       ... 
      } 
     } 
    } 
+0

ConnectionString을 동일한 문자열 있지만, 각 클래스의 멤버이다. 나는 모든 Connection, Command & Reader에'using' 블록을 사용하고 있습니다. 내 통계를 살펴 보겠습니다. 모든 것이 내가 다른 것을 미끄러질 수 있다고 결론을 내립니다. –

+0

@TomerW 당신이 이것을 넣을 수있는 유틸리티 클래스를 만들 것입니다. 모든 클래스에서 이것을 복제 할 이유가 없습니다. –

+0

고마워, 정확히 내가 뭘 바꿨는지 모르겠지만, 코드를 뒤범벅하고 난 후에, 그것은 끊임없이 번개 속도를 실행하고있다 :) –

관련 문제