C#/.NET 사용 3.5.SqlDataAdapter.Fill - 비동기 접근
현재 SqlDataAdapter.Fill()을 사용하여 2 개의 DataTable을 차례로 채우고 있습니다.
각 데이터 테이블을 동시에 비동기 적으로 처리하여 병렬로 채우고 싶습니다. 그러나 Fill() 메서드의 비동기 버전은 없습니다. 즉 BeginFill()이 좋습니다!
- SqlCommand1.BeginExecuteReader // 1 쿼리, DataTable1에 대한
- SqlCommand2.BeginExecuteReader // 두번째 쿼리, DataTable2
- SqlCommand1.EndExecuteReader에 : 나는 시도했다
한 가지 방법은 (의사)입니다
- SqlCommand2.EndExecuteReader
- DataTable1.Load (DataReader1)
- DataTable2.Load (DataReader2)
그러나 DataTable.Load()는 오랜 시간이 걸린다 :
가 그것은 5 다음 22초 소요 4.
공정 단계로 단계 1을 3 초 걸린다.
6 단계는 17 초 걸립니다.
그래서 5 단계와 6 단계에서 39 초를 합친 것입니다.
결과적으로 2 개의 SqlDataAdapter.Fills를 하나씩 수행하는 것 이상의 이점이 없습니다. 나는 순수한 결과가 전체 프로세스가 오직 가장 긴 쿼리 (또는 가능한 한 그것에 가깝게)만큼 오래 걸리기를 원한다.
DataTable을 작성하기위한 진정한 비동기식 접근 방법 인 뭔가를 제안하는 것이 좋습니다.
아니면 그냥 직접 관리하고 DataTable을 채우는 2 개의 개별 스레드를 굴립니까?
, 완료 했습니까? 계속 진행하기 전에 두 테이블을 모두 채워야합니다. – AdaTheDev
도움이된다면 기다리는 개념을 제 대답에 추가했습니다. –
@AdaTheDev, 작업이 완료된 후에 (개별 스레드 내에서) 트리거 할 AutoResetEvents를 사용합니다. @Neils는 이미 예제를 제공 했으므로 답변을 참조하십시오. – James