SqlDataReader : 버퍼링 된 vs 버퍼되지 않은 읽기 - 방법?

c# dapper datareader sqldatareader

문제

나는이 섹션에 올 때까지 Dapper의 문서를 github에서 읽었습니다. Buffered vs Unbuffered reader . 어느 것을 볼지 :

Dapper의 기본 동작은 SQL을 실행하고 반환시 전체 판독기를 버퍼링하는 것입니다. 이것은 db의 공유 잠금을 최소화하고 db 네트워크 시간을 줄이기 때문에 대부분의 경우 이상적입니다.

이 단락이 의미하는 바는 무엇입니까? 실제로 이것이 처음 듣는 순간입니다. 반복없이 SqlDataReader 를 읽을 수있는 방법이 있습니까? 한 번에 모든 행을 읽으시겠습니까?

인기 답변

기억할 수 있듯이, 버퍼링과 버퍼링되지 않음의 차이점은 Query 호출로 호출자에게 컨트롤을 반환하기 전에 객체를 구체화하는 .ToList() 확장 메소드 호출입니다.

본질적으로, Dapper가 데이터베이스를 읽을 때 모든 것을 앞에서 (버퍼링 됨) 실현하거나 데이터 (버퍼링되지 않은)가 필요할 때 실현할 수 있습니다.

버퍼링되지 않은 모드에서 결과를 반복 할 때 내부 데이터 판독기에서 읽고 각 루프에서 지정한 객체로 변환합니다. 작업을 수행하는 데 오랜 시간이 걸리면 오랜 시간 동안 데이터 판독기를 열어 둘 수 있습니다.

버퍼 모드에서는 데이터 판독기가 결과를 얻는 시점까지 완료되었으며, 데이터 판독기를 필요 이상으로 오래 유지하지 못한다는 것을 결과적으로 안전하게 알기를 원하면 오래 걸릴 수 있습니다. 원하는 경우 데이터베이스 연결을 닫으십시오.

또한 버퍼링되지 않은 모드에서는 초기 쿼리의 결과를 반복하고 동일한 연결에서 다른 쿼리를 시작할 수 없습니다.

왜 다른 것을 사용합니까?

버퍼 됨 :

  • 더 작은 데이터 세트
  • 독자가 신속하게 완료되었는지 확인하려는 경우
  • 따라서 쿼리 후 연결을 닫을 수 있습니다.
  • 또는 다른 쿼리에 대한 연결을 재사용하면서 첫 번째 쿼리의 결과를 반복 할 수 있습니다.

버퍼링되지 않음 :

  • 한 번에 모든 것을 메모리에 미리로드하지 않으려는 더 큰 데이터 세트.
  • 데이터 판독기를 활성 상태로 유지하고 연결을 더 오랜 기간 동안 열어 둘 수 있습니다.

나는 대다수의 경우 버퍼 모드를 사용한다고 말하고 싶다. 매우 드물게 데이터를 충분히 크게 설정하여 버퍼링되지 않은 결과를 원합니다.



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