Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
En este tema se abordan las opciones de diseño, configuración, compilación y memoria disponibles para mejorar el rendimiento de una aplicación Web.
Modelos de programación asincrónica
ASP.NET admite técnicas de programación asincrónica que permiten mover una tarea de ejecución prolongada, como una consulta de base de datos, a un subproceso que se ejecuta independientemente del subproceso de la aplicación principal. Puede utilizar las siguientes técnicas:
ComponenteBackgroundWorker: la clase BackgroundWorker en el espacio de nombres System.ComponentModel permite agregar el código para la tarea de ejecución prolongada al controlador de eventos DoWork y llamar al método RunWorkerAsync para que se provoque el evento DoWork. El subproceso que hace la llamada continúa ejecutándose mientras el método de trabajo se ejecuta de forma asincrónica. Cuando el método finaliza, el componente BackgroundWorker avisa el subproceso de la llamada provocando el evento RunWorkerCompleted. Para obtener más información, vea BackgroundWorker (Componente).
Programación asincrónica basada en eventos: el modelo asincrónico basado en eventos puede adoptar varias formas, según la complejidad de las operaciones admitidas por una clase concreta. Las clases más simples pueden tener un único método NombreMétodoAsync con su evento NombreMétodoCompleted correspondiente. Las clases más complejas pueden tener varios métodos NombreMétodoAsync, cada uno de ello con su evento NombreMétodoCompleted correspondiente, así como versiones sincrónicas de estos métodos. Las clases pueden opcionalmente admitir la cancelación, la emisión de informes de progreso y la generación de resultados incrementales para cada método asincrónico.
Todo método asincrónico puede también admitir varias llamadas pendientes (varias invocaciones simultáneas), lo que permite que el código lo llame cualquier número de veces antes de finalizar otras operaciones pendientes. Para controlar correctamente esta situación, puede que la aplicación deba realizar un seguimiento de la finalización de cada operación.
Para obtener una descripción completa de este modelo y su implementación, vea Información general sobre el modelo asincrónico basado en eventos.
Programación asincrónica mediante IAsyncResult Una operación asincrónica que utiliza el modelo de diseño IAsyncResult se implementa como dos métodos denominados BeginNombreOperación y EndNombreOperación que inician y finalizan respectivamente la operación NombreOperación asincrónica. BeginNombreOperación devuelve inmediatamente el control al subproceso que realiza la llamada. El método EndNombreOperación finaliza la operación asincrónica NombreOperación. La sincronización de la llamada a EndNombreOperación es importante, porque bloquea el subproceso que realiza la llamada si la operación NombreOperación no ha finalizado. Para obtener más detalles, vea Información general sobre la programación asincrónica.
Clients callbacks: en una devolución de llamada del cliente, una función de script de cliente envía una solicitud a una página Web ASP.NET con la sobrecarga de una devolución de datos.
Para obtener un ejemplo en el que se utilizan algunas de estas técnicas, vea Ejemplo Event-based Asynchronous Pattern Technology.
Opciones de compilación y configuración
El modo en que se compila y se configura la aplicación afecta a su rendimiento. En las instrucciones siguientes se ofrecen sugerencias para que el conjunto de aplicaciones Web funcione eficazmente:
Si la aplicación Web es grande, precompílela.
Recicle los procesos cuando ejecute aplicaciones Web ASP.NET en Internet Information Services 5.0.
Si es necesario, ajuste el número de subprocesos de cada proceso de trabajo de la aplicación. Para las aplicaciones que confíen en gran medida en los recursos externos, considere la posibilidad de habilitar una matriz de procesos Web en los equipos con varios procesadores.
Deshabilite el modo de depuración.
Ajuste los archivos de configuración del servidor Web y de aplicaciones concretas para que se ajusten a sus necesidades, mediante las técnicas siguientes:
Habilite la autenticación sólo para las aplicaciones que la necesiten.
Configure la aplicación de forma que utilice los valores de codificación de solicitudes y respuestas adecuados.
Considere la posibilidad de deshabilitar AutoEventWireup para la aplicación.
Quite los módulos no usados de la canalización de procesamiento de solicitudes.
Para obtener más detalles, consulte Información general sobre el rendimiento.
Opciones de configuración en caché
Para mejorar el rendimiento de la aplicación, puede configurar el almacenamiento en caché en los niveles siguientes:
Aplicación: en el archivo Web.config de una aplicación, puede utilizar el elemento OutputCacheSection para controlar el almacenamiento en caché de la aplicación completa. Con el elemento OutputCacheSettingsSection, puede configurar perfiles de caché que se puedan aplicar a páginas individuales.
Equipo Puede configurar las mismas opciones en el archivo Machine.config que en el archivo Web.config.
Página: el almacenamiento en caché se puede configurar en páginas individuales aplicando los perfiles de caché definidos en un archivo de configuración. Asimismo, se pueden configurar propiedades de caché individuales en la directiva @ OutputCache o mediante atributos en la definición de clase de la página.
Control El almacenamiento en caché de un control de usuario se puede configurar estableciendo la directiva @ OutputCache en el archivo del control de usuario o estableciendo el atributo PartialCachingAttribute en la definición de clase del control.
Para obtener más información, vea Configuración de la caché en ASP.NET.
Reciclaje de memoria con IIS 6.0
Si una aplicación contiene código que causa problemas, como una aplicación de interoperabilidad COM con pérdidas de memoria conocidas, y no es fácil volver a escribir el código, puede resultar útil limitar la magnitud de los problemas mediante un reciclaje periódico del proceso de trabajo que atiende la aplicación. El reciclaje de un proceso de trabajo reemplaza una instancia de la aplicación en la memoria. IIS 6.0 puede reciclar automáticamente los procesos de trabajo reiniciando los procesos de trabajo asignados a un grupo de aplicaciones. De este modo, las aplicaciones siguen ejecutándose sin problemas.
Mantener el estado durante el reciclaje
Si tiene un grupo de aplicaciones que dependen de los datos de estado, deberá decidir si va a reciclar los procesos de trabajo asignados a ese grupo de aplicaciones. Cuando se recicla un proceso de trabajo, se pierden los datos de estado de las aplicaciones que se mantienen en el proceso. En ese caso, podría optar por no utilizar el reciclaje.
Puede reciclar los procesos y resolver el problema de estado manteniendo los datos de estado fuera del proceso de trabajo, como en una base de datos. Sin embargo, mantener los datos de estado fuera del proceso para permitir el reciclaje puede afectar al rendimiento del servidor de las maneras siguientes:
El rendimiento se reduce debido a la sobrecarga de administración necesaria para mover los datos entre la aplicación y el almacén de datos.
El reciclaje vacía las memorias caché de datos en proceso, por lo que las memorias caché deben volver a generarse.
ASP.NET permite conservar el estado de sesión mediante un servicio de estado de sesión o una base de datos SQL. Para obtener más información, vea Modos de estado de sesión.
Para obtener más información, vea Reciclar procesos de trabajo (IIS 6.0).
Servicio de imágenes nativas
El Servicio de imágenes nativas es un servicio de Windows que genera y mantiene imágenes nativas, que son archivos que contienen código máquina compilado específico del procesador. El servicio de imágenes nativas permite diferir la instalación y la actualización de imágenes nativas a los momentos en los que el equipo se encuentre inactivo. El Generador de imágenes nativas (Ngen.exe) es una herramienta que mejora el rendimiento de las aplicaciones administradas. Ngen.exe crea imágenes nativas y las instala en la caché de imágenes nativas del equipo local. El motor en tiempo de ejecución puede utilizar las imágenes nativas de la caché en lugar de utilizar el compilador Just-In-Time (JIT) para compilar el ensamblado original.
Para obtener más información, consulte el artículo NGen Revs Up Your Performance with Powerful New Features en el sitio Web Magazine de MSDN.
Caché de ensamblados global y el espacio de trabajo
El espacio de trabajo de un proceso es el conjunto de páginas de memoria actualmente disponibles para el proceso en la memoria RAM física. Estas páginas están disponibles para que una aplicación las utilice sin que se desencadene un error de página. Puede supervisar el tamaño del espacio de trabajo mediante las propiedades PeakWorkingSet y WorkingSet. Para reducir el espacio de trabajo de una aplicación, coloque ensamblados en la Caché de ensamblados global. Esta opción se recomienda principalmente para los ensamblados de nivel medio y los ensamblados compartidos.
Vea también
Otros recursos
Chapter 4 — Architecture and Design Review of a .NET Application for Performance and Scalability