2010-08-17 4 views
10

누구든지 asp.net 웹 사이트의 성능 최적화로 Response.IsClientConnected 속성을 사용하여 공유 할 수있는 경험이 있는지 궁금합니다.Response.IsClientConnected는 얼마나 유용합니까?

내가 물어 보는 이유는 실제 시나리오에서 얼마나 효과적 일지 조금은 회의적이라는 것입니다. 커다란 작업을 수행하기 전에 값을 확인하는 개념을 이해하지만 클라이언트가 언제든지 연결을 끊을 수 있기 때문에 이것이 얼마나 유용한 지 알 수 없습니다.

답변

9

주요 사용법은 긴 프로세스의 전달을 최적화하는 것이라고 생각합니다. 예를 들어 거대한 보고서 나 다른 보고서를 생성해야하는 경우 별도의 스레드에서 보고서를 실행 한 다음 주기적으로 사용자가 아직 연결되어 있는지 확인하십시오. 그렇지 않으면 사용자가 더 이상 응답을 기대하지 않기 때문에 불필요하게 실행되지 않도록이 장기 실행 프로세스를 종료 할 수 있습니다.

이렇게하면 사용자가 느린 것으로 생각할 수 있기 때문에 긴 프로세스를 시작한 다음 계속해서 더 많은 요청을하는 것을 방지 할 수 있습니다. 이 유형의 점검을 수행하지 않았다면, 하나만 제외하고 모든 요청으로 인해 서버에 세금을 부과 할 수 있습니다. 이 시나리오는 한 명의 사용자 만 하나의 장기 실행 태스크를 실행할 수 있도록 처리 할 수 ​​있지만 다중 사용자 환경에서도 사용자가 계속 연결되어 대기중인 요청을 처리하는 데만 시간을 소비 할 수 있습니다. 응답.

참고 : 이전에 실제로 사용한 적이 없는데, 이것은 내가 읽은 것에 대한 기본적인 이해를 바탕으로 한 것입니다.

8

저는 이것을 응용 프로그램에서 광범위하게 사용했으며 리소스를 크게 절약 할 수 있습니다.

시도해보십시오. 완료 할 시간이 필요한 페이지를 만들고 완료되기 전에 여러 번 새로 고침하십시오. 요청이 실행 대기열에 있음을 알 수 있습니다. 연결 속도가 느리며 페이지를 여러 번 새로 고침하는 사용자를 상상해보십시오 (모든 사용자가 연결될 때 사이트가 리소스에서 벗어날 수 있고 어떤 이유로 인해 느려지는 경우 매우 자주 발생하는 문제).

이제 각 페이지를로드 할 때마다 (또는 페이지 초기화시 더 빨리) HttpContext.Current.Response.IsClientConnected가 있는지 확인하고 connetced되지 않은 경우 threadabord 예외를 throw하십시오. 너는 볼 것이다, 너의 위치는 다량 더 빨리 반응 할 것이다.

실제로 불필요한 실행을 막기 위해 클라이언트가 페이지에 과다한 행동을하기 전에 연결되어 있는지 확인합니다. 프로덕션 환경에서는 특히 시스템이 느린 경우이 유효성 검사가 많은 도움이 될 것입니다.

관련 문제