Al escribir un controlador / módulo http, hay un miembro de interfaz para implementar llamado - bool IsReusable .
¿Cuál es el significado de este miembro? Si lo configuro en falso (o verdadero), ¿qué significa esto para el resto de la aplicación web?
asp.net
httphandler
ihttphandler
GurdeepS
fuente
fuente
Respuestas:
El punto de entrada normal para un controlador es el método ProcessRequest. Sin embargo, puede tener código en el constructor de la clase que reúne algunos valores de instancia que son caros de construir.
Si especifica Reusable como verdadero, la aplicación puede almacenar en caché la instancia y reutilizarla en otra solicitud simplemente llamando a su método ProcessRequest una y otra vez, sin tener que reconstruirlo cada vez.
La aplicación instanciará tantos manejadores como sean necesarios para manejar la carga actual.
La desventaja es que si el número de instancias necesarias es mayor que las instancias actualmente presentes, causan que se use más memoria. Por el contrario, también pueden reducir los usos aparentes de la memoria, ya que su valor de instancia sobrevivirá a los ciclos de GC y no es necesario reasignarlos con frecuencia.
Otra advertencia es que debe asegurarse de que al final de la ejecución de ProcessRequest el estado del objeto sea el que desea para que otra solicitud reutilice el objeto.
fuente
Con la respuesta de AnthonyWJones, si sus declaraciones de controlador HTTP
true
paraIsReusable
entonces usted debe asegurarse de que está totalmente seguro para subprocesos.No hay nada en la documentación que indique que los controladores reutilizables no se pueden reutilizar simultáneamente, aunque las implementaciones actuales de Microsoft solo parecen reutilizarlos consecutivamente. Pero, al menos en teoría, una sola instancia de controlador podría ser reutilizada simultáneamente por múltiples solicitudes, por lo que no debe confiar en ningún dato que pueda ser modificado por otros hilos concurrentes.
fuente
IsReusable
exigencia de seguridad del hilo parece estar en contradicción con la respuesta de AnthonyWJones. Según entiendo su tercer párrafo (La aplicación creará una instancia de tantos de ...), una instancia de controlador reutilizable no se reutilizará simultáneamente, sino solo después de haber finalizado su procesamiento actual. Si esto es cierto, entonces no hay necesidad de ser seguro para subprocesos.Si no almacena ningún estado en esa instancia (es decir, no tiene ningún campo (también conocido como "variables de clase")) entonces debería estar seguro de reutilizarlo.
Por defecto, es falso estar del lado seguro.
fuente