대량 전송을위한 MySqlDataAdapter 또는 MySqlDataReader?

mysql sqlbulkcopy sql-server

문제

.NET 용 MySql 커넥터를 사용하여 MySql 서버의 데이터를 SQL Server 2008로 복사합니다.

다음 중 하나를 사용하여 더 나은 성능을 경험 한 사람이 있습니까?

  • DataAdapter 및 500 청크 단위로 DataTable 채우기 호출
  • DataTable을 500 개의 루프에서 읽습니다.

그런 다음 SqlBulkCopy를 사용하여 500 DataTable 행을로드 한 다음 MySql 레코드 집합이 완전히 전송 될 때까지 계속 반복합니다.

나는 주로 합리적인 양의 메모리를 사용하고 짧은 시간 안에 완료하는 것에 관심이 있습니다.

어떤 도움을 주시면 감사하겠습니다!

수락 된 답변

많은 양의 데이터를 처리 할 때 SqlBulkCopy를 DataReader와 함께 사용했습니다. 전체 데이터 세트가 복사되기 전에 검색되지 않기 때문에 프로세스가 속도와 메모리 사용면에서 상당히 효율적이라는 것을 알았습니다. BatchSize 속성을 적절한 값, 예를 들어 500으로 설정하는 것이 좋습니다.


인기 답변

저는 SqlBulkCopy를 사용하지 않았지만 일반적으로 DataReaders는 일반적으로 더 나은 성능을 제공합니다.

기본 쿼리가 레코드를 반환하는 동안 DataReader를 처리 할 수 ​​있으므로 데이터 처리를 시작하기 전에 쿼리가 완료 될 때까지 기다릴 필요가 없습니다. DataReader는 사용 가능한 즉시 데이터를 반환 할 것이므로 기본적으로 전체 결과 집합이 아닌 활성 레코드 만 메모리에 저장하므로 메모리 사용량이 줄어 듭니다.

DataAdapter는 정보가 메모리에 저장되는 방식과 추가 연결된 상태 (생각할 수있는 행 상태 등)로 인해 더 높은 오버 헤드를 갖는 DataTable / DataSet에 전체 결과 집합을로드합니다.

데이터를 읽는 중이라면 DataAdapter를 통해 항상 DataReader를 사용합니다 ... 누군가 내가 잘못한 부분이 있으면 저를 교정하십시오.

그럼에도 불구하고 SqlBulkCopy는 레코드를 반복하면서 DataTable을 Reflector에 따라 최적화하지 않기 때문에 DataReader가 최선의 방법이라고 생각합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.