2011-08-13 7 views
7

Al escribir vistas MVC, veo mucha llamada al método Html helper como EditorFor/LabelFor. Estas extensiones usan mucha reflexión detrás de escena. Junto con la forma en que el enrutamiento, el encuadernado del modelo, la validación, la manipulación EF ... se manejan a través de la reflexión, me pregunto cuánto daña el rendimiento.¿Qué hace el marco MVC para evitar el bajo rendimiento que hereda del uso intensivo de la reflexión

Quiero saber qué hace MVC framework bajo el capó para abordar las implicaciones del uso de la reflexión en una escala tan grande.

Estoy seguro de que se debe hacer algún tipo de almacenamiento en caché, pero saber exactamente lo que hace será una buena experiencia de aprendizaje y la garantía de que no estamos comprometiendo el gran rendimiento por el aumento de la productividad.

+0

Aunque no soy un experto, supongo que hay un uso intensivo de [compilación de los árboles de expresión dinámicos] (http: // MSDN .microsoft.com/es-us/library/bb345362.aspx). –

+1

Usar la reflexión no significa ** necesariamente un mal rendimiento: consulte este excelente [artículo de MSDN Magazine] (http://msdn.microsoft.com/en-us/magazine/cc163759.aspx) sobre qué buscar –

+0

El rendimiento es relativo. La reflexión es más lenta que las llamadas al método de enlace temprano, pero no, cuando se usa y almacena en caché, es lo suficientemente lenta como para hacer que una aplicación como un todo sea notablemente lenta cuando se usa de forma adecuada. –

Respuesta

10

Como dijo marc_s en el comentario utilizando la reflexión no es necesariamente algo malo. Soy responsable de muchas de las investigaciones de rendimiento para MVC (e incluso escribí a few blog posts on MVC performance) y el mayor problema de rendimiento en aplicaciones del mundo real es el acceso a la base de datos. Todo lo demás palidece en comparación.

Pero tratamos de mantener el marco de trabajo lo más delgado posible y, por lo tanto, hacemos el almacenamiento en caché cuando corresponde. Esto incluye ver búsquedas de archivos, expresiones lambda modelo y mucho más. La forma más sencilla de aprender sobre esto probablemente sea mirar el código fuente y buscar lugares donde usemos Dictionary<Type, T>, MemoryCache o HttpContext.Cache.

Otra forma sería ejecutar realmente una aplicación de Mvc en un generador de perfiles, pero ese es un tema un poco más avanzado (aunque si lo buscas obtendrás algunos buenos éxitos).

Al final tienes que confiar en nosotros de que estamos haciendo lo correcto :) Ya hemos optimizado muchos de los problemas de rendimiento y el uso de la reflexión restante simplemente no tiene mucho impacto.

Y aquí está un video greate de Steven Smith sobre cómo ajustar el rendimiento de una aplicación MVC: http://channel9.msdn.com/Series/mvcConf/mvcConf-2-Steven-Smith-Improving-ASPNET-MVC-Application-Performance

+0

gracias por su respuesta. Esto suena seguro, el video también es increíble y toca varias facetas de rendimiento para empezar. –

Cuestiones relacionadas