나는 작성 중이며 속성 IHttpHandler
을 구현해야 IsReusable
합니다. MSDN 설명서를 보면 다음과 같이 말합니다.
다른 요청이 IHttpHandler 인스턴스를 사용할 수 있는지 여부를 나타내는 값을 가져옵니다.
이것은별로 도움이되지 않습니다. 재사용 가능한 핸들러를 사용해야하는 상황과 재사용이 불가능한 상황은 무엇입니까?
후속 질문 :
- 재사용이란 무엇입니까?
- 상태 (즉, 클래스 변수)를 유지할 수 있습니까
Reusable = true
?
답변
이 속성은 동일한 IHttpHandler 인스턴스로 여러 요청을 처리 할 수 있는지 여부를 나타냅니다. 기본적으로 요청 파이프 라인의 끝에서 HttpApplication의 handlerRecycleList에 배치 된 모든 http 처리기는 null로 설정됩니다. 핸들러를 재사용 할 수있는 경우 null로 설정되지 않고 인스턴스가 다음 요청에서 재사용됩니다.
가장 큰 이점은 가비지 수집 할 개체가 적기 때문에 성능입니다.
재사용 가능한 핸들러의 가장 중요한 문제점은 스레드로부터 안전해야한다는 것입니다. 이것은 사소한 것이 아니며 약간의 노력이 필요합니다.
가비지 컬렉터가 쉽게 처리해야하므로 관리되는 리소스 만 사용하는 경우 기본값 (재사용 불가능)을 그대로 두는 것이 좋습니다. 재사용 가능한 처리기의 성능 향상은 스레딩 버그를 찾기 어렵게 만드는 위험에 비해 일반적으로 무시할 수 있습니다.
핸들러를 재사용하기로 결정한 경우 핸들러 인스턴스가 동시에 액세스되면 여러 요청이 값을 쓰고 / 읽기 때문에 클래스 변수에서 상태를 유지하지 않아야합니다.
답변
분명히 이것은 핸들러를 메모리에 유지하고 여러 요청을 처리 할 수 있습니다. false로 설정하면 들어오는 각 요청에 대해 처리기의 새 인스턴스를 만들어야합니다.
다음은 제대로 사용하지 않을 때 어떤 일이 발생하는지 보여주는 질문입니다.
HttpHandler를 사용하여 데이터베이스 이미지 스트리밍
답변
요청이 들어올 때마다 처리기를 재활용하는 것보다 처리기를 재활용하는 것이 더 저렴하며 서버는 메모리를 적게 사용하므로 GC가 수행해야하는 작업이 쉬워집니다. 핸들러가 새 요청을 처리하는 데 문제가되지 않는 상태 (즉, 핸들러 인스턴스의 모든 상태가 재설정 됨) 에 있으면 재사용 가능한 것으로 간주되어야합니다.
편집하다
내 대답이 재사용이 무엇인지 올바르게 정의하는지 잘 모르겠습니다. 실제로 동시 재사용을 허용하므로 효과적으로 상태를 피하거나 스레드로부터 안전한 방식으로 신중하게 관리 할 수 있습니다.