속도 제한 기능을 사용하여 파일 전송 처리기를 프로그래밍합니다. 사용자 수준에 따라 속도가 달라집니다. HttpHandler에서 전송 속도를 제어/계산하는 방법은 무엇입니까?HttpHandler를 사용하여 전송 속도를 제한하는 방법
일부 asp.net 리소스를 사용하면 Thread.Sleep을 사용하면 asp.net 스레드 풀이 차단됩니다.
속도 제한 기능을 사용하여 파일 전송 처리기를 프로그래밍합니다. 사용자 수준에 따라 속도가 달라집니다. HttpHandler에서 전송 속도를 제어/계산하는 방법은 무엇입니까?HttpHandler를 사용하여 전송 속도를 제한하는 방법
일부 asp.net 리소스를 사용하면 Thread.Sleep을 사용하면 asp.net 스레드 풀이 차단됩니다.
이렇게하려면 타이머와 타이머 콜백을 사용해보십시오. 아이디어는 핸들러가 실행될 수있는 시간과 얼마나 오래 지속될지를 트리거하는 타이머 (또는 아마 두 개)를 갖는 것입니다. "go"타이머가 만료 될 때마다 "stop"타이머가 만료 될 때까지 (또는 동일한 타이머가 다시 만료 될 때까지) 응답에 데이터를 쓰는 스레드를 시작한 다음 해당 스레드가 수행중인 작업을 마치고 해당 스레드에 대한 가사를 수행합니다. 다음 스레드는 "go"타이머를 재설정하고 종료합니다. 주 스레드는 초기 타이머, 전송할 데이터를 설정 한 다음 타이머를 호출하고 종료합니다. 아마도 당신은 어딘가에 응답에 대한 핸들을 유지하여 다시 액세스 할 수 있어야합니다. 핸들러가 대기/실행해야하는 시간을 변경하여 사용하는 리소스의 수를 제어 할 수 있습니다.
ASP .NET의 모든 스레드를 잠자기하는 것은 일반적으로 좋지 않습니다. 스레드에서 풀의 요청을 처리하는 데 사용할 수 있기 때문입니다. 풀에 10 개의 스레드가 있다고 가정하면 다운로드를 처리하는 10 개의 스레드를 잠자기하면 다운로드가 완료 될 때까지 다른 모든 요청이 대기열에 쌓이게됩니다.
에 perscribed과 같이 가장 잘, 대신을 IHttpHandler의 IHttpAsyncHandler를 작성하여 제공됩니다 :
http://msdn.microsoft.com/en-us/library/ms227433.aspx
당신은 주기적으로 클라이언트에 X 바이트의 데이터를 펌프 타이머를 사용 (하지만 확신 할 수 있습니다 IsClientConnected 또는 일부를 사용하여 닫힌 연결을 위해 주기적으로 풀링).