http 핸들러 / 모듈을 작성할 때 -bool IsReusable 을 구현할 인터페이스 멤버가 있습니다.
이 멤버의 의미는 무엇입니까? False (또는 True)로 설정하면 나머지 웹앱에 어떤 의미가 있습니까?
http 핸들러 / 모듈을 작성할 때 -bool IsReusable 을 구현할 인터페이스 멤버가 있습니다.
이 멤버의 의미는 무엇입니까? False (또는 True)로 설정하면 나머지 웹앱에 어떤 의미가 있습니까?
답변:
핸들러의 일반적인 진입 점은 ProcessRequest 메소드입니다. 그러나 클래스 생성자에 빌드 비용이 많이 드는 일부 인스턴스 값을 구성하는 코드가있을 수 있습니다.
재사용 가능을 true로 지정하면 애플리케이션은 매번 재구성 할 필요없이 ProcessRequest 메소드를 반복해서 호출하여 인스턴스를 캐시하고 다른 요청에서 재사용 할 수 있습니다.
응용 프로그램은 현재로드를 처리하는 데 필요한만큼의 이러한 핸들러를 인스턴스화합니다.
단점은 필요한 인스턴스 수가 현재 존재하는 인스턴스보다 많으면 더 많은 메모리를 사용한다는 것입니다. 반대로 인스턴스 값이 GC주기를 유지하고 자주 다시 할당 할 필요가 없으므로 메모리 사용을 줄일 수도 있습니다.
또 다른 경고는 ProcessRequest 실행이 끝날 때 다른 요청이 객체를 재사용하기를 원하는 상태인지 확인해야한다는 것입니다.
또한 AnthonyWJones의 대답에, 당신의 HTTP 처리기를 반환하는 경우 true
에는 IsReusable
다음 완전히 스레드 안전되어 있는지 확인해야합니다.
현재 Microsoft 구현에서는 연속적으로 재사용하는 것처럼 보이지만 재사용 가능한 핸들러를 동시에 재사용 할 수 없음을 나타내는 문서는 없습니다. 그러나 적어도 이론 상으로는 단일 처리기 인스턴스가 여러 요청에 의해 동시에 재사용 될 수 있으므로 다른 동시 스레드에 의해 수정 될 수있는 데이터에 의존해서는 안됩니다.
IsReusable
스레드 안전성 요구 에 대한이 설명은 AnthonyWJones 응답과 모순되는 것 같습니다. 세 번째 단락 (응용 프로그램이 많은 인스턴스를 생성합니다 ...)을 이해하면 재사용 가능한 핸들러 인스턴스는 동시에 재사용되지 않고 현재 처리가 완료된 후에 만 재사용됩니다. 이것이 사실이라면 스레드 안전이 필요하지 않습니다.