2009-02-11 20 views
124

Al escribir un manipulador/módulo http, hay un miembro de interfaz para implementar llamado - bool IsReusable.Importancia de bool IsReusable en la interfaz del controlador http

¿Cuál es la importancia de este miembro? Si lo configuro en falso (o verdadero), ¿qué significa esto para el resto de la aplicación web?

+0

[Uso del mundo real de IHttpHandler.IsReusable Property] (http://stackoverflow.com/questions/10806214/ihttphandler-isreusable-property-truly-usages) –

Respuesta

146

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 Reutilizable para que sea 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 sea necesario 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 del GC y no es necesario que se reasignen con frecuencia.

Otra advertencia es que debe asegurarse de que al final de la ejecución de ProcessRequest el estado del objeto es el que desea para otra solicitud para reutilizar el objeto.

+0

Menciona la reutilización de objetos como la optimización clave lograda al especificar IsReusable = Verdadero. La configuración de IsReusable = False hará que el servidor no ejemplifique instancias múltiples del controlador nunca. ES DECIR. - ¿Elimina las solicitudes simultáneas? – Ian

44

Además de la respuesta de AnthonyWJones, si su manejador HTTP devuelve true para IsReusable, entonces debe asegurarse de que sea totalmente seguro para la ejecución de subprocesos.

No hay nada en la documentación que indique que los controladores reutilizables no se pueden reutilizar al mismo tiempo, aunque las implementaciones actuales de Microsoft solo parecen volver a utilizarlos consecutivamente. Pero, al menos en teoría, una sola instancia del controlador podría reutilizarse simultáneamente por varias solicitudes, por lo que no debe confiar en ningún dato que pueda ser modificado por otros hilos concurrentes.

+0

Disculpe por ser grosero, pero ¿podría alguien explicar qué se entiende por "cambio de contexto"? Si accede a cosas desde el sesson o la cadena de consulta (content.Request.QueryString) ¿es eso reutilizable o no? – zod

+4

La conmutación de contexto ocurre cuando una CPU detiene el procesamiento en un subproceso y comienza el procesamiento en otro. ES DECIR. la CPU cambió su contexto de un hilo a otro. Esto sucede constantemente en las PC, nos dio la ilusión de realizar múltiples tareas antes de que hubiera computadoras multinúcleo. – TwistedStem

+0

No pude entender cuándo dijiste ** Podría haber un cambio de contexto en cualquier momento **. Cuando escribimos url y presionamos enter, esto ejecuta una solicitud a la vez. derecho ? –

3

Si no almacena ningún estado en esa instancia (es decir, si no tiene ningún campo (también conocido como "variables de clase")), entonces debería estar seguro reutilizándolo.

Por defecto es falso estar en el lado seguro.

Cuestiones relacionadas