2009-04-08 2 views

답변

1

배열에서 바이트가 필요한 경우 결과 스트림의 모든 바이트를 배열로 스트리밍해야하기 때문에 모든 메서드가 거의 같을 것입니다 (SqlClient 클래스는이 작업을 수행 할 것입니다 당신을 위해).

반환 할 결과 집합에 대한 스키마 정보가 없으므로 저장 프로 시저가 약간 빠르지 만 저장 프로 시저 또는 데이터베이스 테이블의 필드에 varbinary 출력 매개 변수가 있는지 여부는 중요하지 않습니다 . 그러나 이것은 돌아가는 데이터의 크기에 비해 무시할 만합니다.

성능 향상을 원한다면 SequentialAccess가 설정된 DataReader를 사용하고 반환되는 필드에 대해 GetBytes를 호출자에게 전달하는 것이 좋습니다. 이를 호출하면 필요한 바이트 만 가져오고 데이터를 청크로 처리 할 수 ​​있습니다.

크기가 2MB 인 배열을 할당하는 데 문제가 있기 때문에 중요합니다. 일반적으로 개의 연속적인 메모리 블록 (배열이 무엇인지)을 할당하기 시작하는 것은 좋지 않은 생각이며 성능을 저하시킵니다. 가능한 경우 작은 단위로 데이터를 처리하십시오.

+0

GetBytes가있는 버퍼를 사용하면 2MB의 전체 크기를 고려할 때 어떤 버퍼 크기가 적당합니까? – Larsenal

+0

@Larsenal : 말하기는 불가능합니다. 앱의 성능 특성과 관련해서 만 결정할 수 있습니다. 튜닝 문제입니다. 난 아마 당신이 처리하고자하는 데이터를 충분히 큰 가정 몇 KB 주위 어딘가에 시작거야. – casperOne

관련 문제