2010-05-30 2 views
0

HttpResponse.End()은 msdn에 따라 예외를 throw하는 것으로 보입니다. 바로 지금 내가 최종 스레드 (그것은 2 함수 깊은 간다) 또는 말을 끝() 호출 할 수있는 값을 반환하는 선택의 여지가.빠른 웹 애플리케이션에 HttpResponse.End()를 사용해야합니까?

나는 그걸 알아야 할 때 쉽게 호출 할 수있는 웹 페이지를 원한다면 throwing exceptions is significantly slower (C# /. NET 테스트에 대한 설명을 읽음)을 알고있다.

-edit- 저는 특정 함수와 클래스의 생성자에서 함수 호출을 사용하여 사용자가 로그인했는지 확인합니다. 따라서 HttpResponse.End()를 충분한 장소에서 호출하기를 바랍니다. 너무 자주 발생합니다.

답변

2

Response.End 만 사용하십시오. 성능 향상을 위해 코드를 작성하기 전에 유지 보수성을위한 코드를 작성하십시오.

게다가 성능 측정 값 은 웹 응용 프로그램의 경우이 확장 성이 있습니다. 즉, "이 단일 요청을 얼마나 빨리 처리 할 수 ​​있습니까?"가 아니라 "동시에 여러 요청을 처리 할 수 ​​있습니까?"라는 질문을해서는 안됩니다.

예외가 당신의 확장에 영향을 미치지 않으며, 사물의 웅대 한 계획에서, 단일 요청에 마이크로 여분의 부부는 아무것도 아니다 : 그것은 네트워크 왕복에 적어도 50 밀리 초 수 있습니다 기억 : 또 다른 100 마이크로입니다 소음.

+0

단일 요청을 처리하는 데 걸리는 시간이 일정하지 않으므로 주어진 시간 동안 처리 할 수있는 요청의 양에 영향을 줍니까? 동시 대기 성능만큼 네트워크 대기 시간이 얼마나 중요합니까? 대기 시간 때문에 다른 사람들로부터 데이터가 도착하기를 기다리는 동안 앱이 다른 클라이언트를 돕고 있다고 생각할 수 있습니다. 따라서 단일 클라이언트 대기 시간이 전체 동시 성능에 미치는 영향에 대해서는 확신 할 수 없습니다. – Klinky

+0

@Klinky : 그렇습니다. 그렇지만 확장 성 향상은 개별 요청의 응답 시간과는 독립적으로 (또는 비용을 감안하더라도) 가능합니다. 저의 요점은 대부분 확장 성 향상에 초점을 맞추어야하고 개별 요청의 응답 시간 (이유 내에서)에 대해서는 너무 걱정하지 않아야한다는 것입니다. –

+0

제 추악한 코드에 따르면 * 200 밀리 초당 13-20 건의 예외가 발생할 수 있습니다 (테스트는 100ms로 매우 다양했습니다). 또는 500ms 당 48 개. 그래서 하나의 예외는 10ms가 걸릴 수 있습니다. 그러나 나는 그것이 받아 들여지는 대답의 정비 성 및 확장 성 부분에 대한 글을 좋아한다. * microseconds *이지만 * milliseconds *;는 아닙니다.) 잘못 작성되었지만 꽤 적합한 테스트는 http://www.pastie.org/985017 –

2

HttpResponse.Flush를 사용하여 요청을 완전히 종료하는 대신 클라이언트에 데이터를 푸시하여 잠재적 예외가 발생하지 않도록 할 수 있습니다.

참고 :이 예외는 Response.End가 호출 될 때 항상 throw되지 않는 경우에만 요청을 중간에 끝낼 때 발생합니다.

+0

중간에 끝나는 지 어떻게 알 수 있습니까? 또는 함수가 미래에 조기에 종료 될시기를 어떻게 알 수 있습니까? 이것이 내가 .end() 호출 할 수 있다는 것을 의미합니까? doSomeDBCode; doSomethingWithResponse() 그리고 거기에서 끝내야합니까? –

+1

자신이'Response.End'를 호출하면 예외가 발생합니다. 처리주기가 끝나면 시스템은 자동으로 'Response.End'를 호출합니다. 즉, "조기"가 아닙니다. –

관련 문제