2010-01-26 3 views
0

일부 백엔드 코드에 대해 TableAdapter 클래스를 자동 생성하기 위해 .xsd 데이터 세트를 사용하고 있습니다. 필자는 전에 수동 명령을 선호하고 가능할 때마다 procs를 저장하는 경향이있었습니다 (다양한 속도로 인해 xsd가 동적 테이블과 많은 양의 열을 가지고 지옥을 움직입니다). 그리고 TableAdapter를 실제로 인스턴스화했습니다. 많은 나의 방법, 그래서 내 질문은자동 생성 된 TableAdapter를 사용할 때 반복되는 인스턴스화를 처리하기위한 제안 된 방법은 무엇입니까?

자동 생성 된 코드가 자동으로 자동화되어 전체 어댑터 클래스가 instatiation에 만들어지지 않고 대신에 일부 정적 데이터 (예 : 연결 정보), 그렇지 않다면 나에게 몇 가지 정보를 얻고 싶을 때마다 새 어댑터를 만드는 데 필요한 오버 헤드없이 필요할 때 자신의 메서드에 액세스 할 수있는 일종의 싱글 톤/정적 클래스 공급자를 사용하는 것이 더 좋을까요?

는 건배, 에드

+0

TA의 인스턴스화에 실제로 많은 오버 헤드가 있습니까? 내가 생성자에서 볼 수있는 유일한 것은'this.ClearBeforeFill = true; '입니다. 그리고 CommandCollection과 Connection 속성은 TA의 수명 기간 동안 한 번만 설정됩니다 ..... 설정시 발생하는 오버 헤드는 첫 번째 호출은 공용 메서드 ..... Fill 메서드 중 하나입니다. 따라서 범위에 머물러 있다면 성능에 대한 문제는 기대할 수 없습니다. 나는 기초로부터 떨어져서 여기에있다? – Ken

+0

그건 솔직히 말해서 대답에 가깝다. 내가 명령을 실행할 때마다 새로운 것을 만들 때 성능이 떨어지는 지 알아보기 위해 찾고있다. 문자 그대로는 있지만 아주 가깝습니다. 시스템 복잡성으로 인해 이러한 코드를 사용하는 코드가 있습니다.) 또는 캐시 된 제공자 모델을 만들어 필 요에 따라 제공해야하는 경우. –

+0

어쩌면 DotTrace를 사용하여 내 주장을 확인할 수 있습니다. (BTW ... 나는 VS2005를 사용하고있다.) 디자인 타임에 입력 된 연결 문자열이 있기 때문에 일반적으로하는 한 가지는 수락 및 설정하는 테이블 어댑터의 부분 클래스에서 오버로드 생성자를 만드는 것이다 생산 연결 문자열, 디자인 타임 문자열이 아닙니다. 그러나 이것은 인스턴스화시 연결을 설정하기 때문에 약간의 비용이 들게됩니다. – Ken

답변

1

성능에 대한 우려가있는 경우 벤치마킹을 통해 항상 성능에 어떤 영향이 있는지 확인할 수 있습니다.

죄송합니다. 내 대답이 유용하지 않다면 죄송합니다.

요점은 응답을받는 동안 모두 주관적이고 하드 데이터를 기반으로하지 않는 것입니다. 따라서 특정 애플리케이션에서 성능이 저하되었다고 우려해야하는 이유가 있다면이를 측정해야합니다.

실제 문제가 발생하지 않는 한 성능을 위해 한 영역을 리팩터링 할 이유가 없습니다.

+0

나는 할 수있다 : 또는 나는 stackoverflow에 물어볼 수 있고 나 자신을 약간의 시간 노력을 절약 할 수 있고, 그룹 공감대의 어떤 형식이 있는지 볼 수있다. . 오, 잠깐만 ... –

1

사실 어댑터의 매우 낮은 숫자 (각 유형의 보통 하나)를 실체화하는 경향이있다. 스택 변수 (필요시 인스턴스화)와 같이 사용하지는 않았으므로 귀하의 질문에 결코 굴하지 않았습니다. 그러나 귀하의 우려를 이해합니다.

내가 아는 바로는 인스턴스 자체가 꽤 무거울 수 있지만 실제 킬러는 연결입니다.

void Load() { 
    using (SqlConnection conn = ...) { 
    conn.Open(); 
    invoicesAdapter.Connection = conn; 
    customersAdapter.Connection = conn; 
    invoicesAdapter.Fill(dataSet.Invoices); 
    customersAdapter.Fill(dataSet.Customers); 
    } 
} 

void Save() { 
    using (SqlConnection conn = ...) { 
    conn.Open(); 
    invoicesAdapter.Connection = conn; 
    customersAdapter.Connection = conn; 
    invoicesAdapter.Update(dataSet); 
    customersAdapater.Update(dataSet); 
    } 
} 

: 내가하는 일은 내가 그래서 내가 그것을 사용해야하는 어떤 속성을 할당하고, 연결 꽉 오프닝에 그립과 폐쇄를 유지할 수 .XSD 디자이너 Public와 어댑터의 연결 수정을 표시입니다 간결함을 위해 트랜잭션 제어와 오류 처리를 생략했습니다.

관련 문제