2009-12-22 1 views
1

이것은 친구가 전화로 질문 한 문제입니다. 그가 작성한 C# 3.5 프로그램은 350,000 개의 레코드가있는 Patient Master 테이블의 Dataset을 채 웁니다. Oracle 용 Microsoft ADO.NET 드라이버를 사용합니다. ExecuteQuery 메서드는 데이터 집합을 채우는 데 30 초 이상 걸립니다. 그러나 동일한 쿼리 (약 20K 레코드 가져 오기)는 Toad에서 3 초 미만입니다. 그는 프로그램 내에서 어떠한 거래도 사용하지 않습니다. 그것은 검색에 사용되는 컬럼 (이름)에 대한 색인을 가지고 있습니다.Oracle 9i의 .NET DataSet 채우기가 느림

이 내가 제안 몇 가지 대안은 다음과 같습니다 -

1) 데이터 판독기를 사용하고 데이터 테이블을 채우고 좋은 생각이 아니다있는 (콤보 상자에 바인딩 폼에 전달 시도 가) 같은 시간이 걸릴 가능성이 있기 때문에

2) 특정 ADO.NET 라인을 식별 할 수 있는지 확인하기 위해 ADO.NET 드라이버 '

3)를 사용하여 개미 프로파일 러를 오라클을 사용해보십시오.

누구나 비슷한 문제에 직면했으며이를 해결할 수있는 방법은 무엇입니까?

감사합니다. Chak.

+0

가 두꺼비의 쿼리가 모든 행을 인출 하는가 아니면 그냥 처음 100 또는 1000 : 여기에 캐리 밀셉에서 (방법 연구 및 이전 Hotsos의) 이렇게 자세한 사항이 논문은 무엇입니까? – Theo

+0

Toad 쿼리는 약 20 개의 K 레코드를 가져옵니다. 데이터 리더는 단 몇 초 만에 완료됩니다. 30 초가 걸리는 데이터 집합입니다. – Chakra

답변

0

그는 자신의 임무를 수행하는 데 사용하는 실제 코드를 알지 못하고 실제로 가져 오는 행 수를 알지 못하고 (나는 그가 모든 350K를 읽지 않기를 바랍니까?) 도움이 될만한 말은 불가능합니다. .

명확성을 위해 질문에 코드 스 니펫을 추가하십시오.

+0

그는 단지 DataAdaptor.Fill을 사용하고 있습니다. – Chakra

1

Toad는 일반적으로 첫 번째 x 행 (내 설정에서 500 개) 만 가져옵니다. 비교가 유효한 지 다시 한번 확인하십시오.

그런 다음 DB에서 시간이 많이 걸리는지 확인하려면 가능하면 양식에서 DB를 분리해야합니다.

그럴 경우 Oracle 라이브러리를 사용해보십시오. 최신 오라클 드라이버와 표준 Microsoft 드라이버가 50 % 향상되었습니다.

+0

db 항목은 비즈니스 계층에 있습니다. UI 레이어에 있다는 인상을 주셔서 죄송합니다. 우리가 도달 한 결론은 DataSet/DataTable을 사용하면 30 초 지연을 설명하는 자체 오버 헤드가 있다는 것입니다. – Chakra