Ao escrever um manipulador / módulo http, há um membro da interface a ser implementado chamado - bool IsReusable .
Qual é o significado desse membro? Se eu configurá-lo como falso (ou verdadeiro), o que isso significa para o restante do aplicativo Web?
asp.net
httphandler
ihttphandler
GurdeepS
fonte
fonte
Respostas:
O ponto de entrada normal para um manipulador é o método ProcessRequest. No entanto, você pode ter um código no construtor da classe que reúne alguns valores de instância que são caros de serem construídos.
Se você especificar Reusável como verdadeiro, o aplicativo poderá armazenar em cache a instância e reutilizá-la em outra solicitação, simplesmente chamando seu método ProcessRequest repetidamente, sem precisar reconstruí-lo a cada vez.
O aplicativo instanciará quantos manipuladores forem necessários para lidar com a carga atual.
A desvantagem é que, se o número de instâncias necessárias for maior que as instâncias atualmente presentes, elas causam mais memória a ser usada. Por outro lado, eles também podem reduzir o uso aparente de memória, pois o valor da instância sobreviverá aos ciclos do GC e não precisam ser realocados com frequência.
Outra ressalva é que você precisa ter certeza de que, no final da execução do ProcessRequest, o estado do objeto está como você deseja que outra solicitação reutilize o objeto.
fonte
Na sequência da resposta das AnthonyWJones, se seus retornos HTTP manipulador
true
paraIsReusable
, em seguida, você deve garantir que ele é thread-safe totalmente.Não há nada na documentação que indique que manipuladores reutilizáveis não podem ser reutilizados simultaneamente, embora as implementações atuais da Microsoft pareçam reutilizá-los consecutivamente. Mas, pelo menos em teoria, uma instância de manipulador único pode ser reutilizada simultaneamente por várias solicitações; portanto, você não deve confiar em nenhum dado que possa ser modificado por outros encadeamentos simultâneos.
fonte
IsReusable
exigência de segurança do encadeamento parece estar em contradição com a resposta do AnthonyWJones. Pelo que entendi no terceiro parágrafo (O aplicativo instanciará tantos ...), uma instância de manipulador reutilizável não será reutilizada simultaneamente, mas somente após o término do processamento atual. Se isso for verdade, não há necessidade de ser seguro para threads.Se você não armazenar nenhum estado nessa instância (por exemplo: você não possui nenhum campo (também conhecido como "variáveis de classe")), deve reutilizá-lo com segurança.
Por padrão, é falso estar do lado seguro.
fonte