나는 그런 생각을 가지고 있습니다 (좋지 않거나 좋지 않습니다). 난 reglament에 의해 SQL 서버에 연결하고 응용 프로그램에 일부 데이터를 가져 오는 유틸리티가 있습니다. 데이터는 간단합니다 (2 개의 varchar 텍스트 속성). 데이터 수는 3 백만 행입니다. 그래서, 제 어플리케이션은 네트워크를 집중적으로 사용합니다. SQL DataReader
에 의해 네트워크 대역폭 사용을 프로그래밍 방식으로 줄이거 (제한, 제한 등 ...) 수 있습니까? 더 천천히 작동 시키지만 서버 나 클라이언트 모두에 스트레스를주지 마십시오. 이 아이디어가 좋은가요? 그렇지 않다면 어떻게해야합니까? 여기SQL DataReader 네트워크 사용 한도
지금까지 코드입니다 :
using (SqlConnection con = new SqlConnection("My connection string here"))
{
con.Open();
using (SqlCommand command = new SqlCommand(query, con))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
yield return new MyDBObject()
{
Date = (DateTime)reader["close_date"],
JsonResult = (string)reader["json_result"]
};
}
}
}
}
예 - 데이터 판독기를 사용하면 클라이언트 측의 모든 데이터를 구체화 할 필요없이 대형 데이터 세트를 지연 테스트 할 수 있습니다. 데이터 액세스에서 async/await를 사용하면 yield return generator를 별도의 함수 (또는 로컬 함수)로 옮겨야 할 가능성이 높습니다. [Example here] (https://stackoverflow.com/a/47376646/314291) – StuartLC
클라이언트에서 효과적으로 조절할 수 없습니다. 그렇게하면 서버 끝의 잠금과 버퍼를 잠그고 행을 생성 할 수없는 스레드를 차단합니다. "작동"한다고하더라도 대역폭을 줄이면 서버의 대기 상태 통계는 스파이크는 'ASYNC_NETWORK_IO' 대기를 많이 보게 될 걱정되는 DBA로부터주의를 끌 수 있습니다. 호출 당 가져 오는 데이터의 양을 줄여 다른 쿼리를위한 여유 공간을 확보 할 수 있지만 가능한 빨리 가져 오는 모든 데이터를 항상 처리합니다. –