Usando Objeto Cache para optimizar un Aplicacion Web, antes de desplegarla! Fecha: 30/Abr/2005 (21/Abr/05)
|
Introducción
Una vez que tenemos nuestra aplicación lista para desplegar y subirla al servidor, hay algunas acciones que mejoran el rendimiento de la aplicación en el servidor. Una de las formas de optimizar es hacer uso del Objeto Cache, pero como podemos usar la Cache?. La Cache la usamos para almacenar variables de aplicacion, o variables globales a la aplicación, que son usadas por tiempo determinado,ya que estas se almacena en la memoria del servidor, es decir, al inicio de nuestra aplicación recuperamos todos los alumnos y los llenamos en un DataSet. Este DataSet lo podemos colocar en la Cache y estara disponible para toda la aplicación, sin necesidad de volver a llamar a la base de datos para recuperar los datos, solo hacemos uso del Objeto Cache que esta en memoria. A continuación veremos un ejemplo con el cual detallaremos mas funcionalidades del Objeto Cache y como usarlo.
Usando el Objeto Cache
1. Crear Archivo Xml
Crearemos un archivo Xml, que nos servira para llenar nuestro dataSet, este archivo Xml lo utilizaremos como nuestra fuente de datos. Recuerden que Xml es CaseSentive, hay que tener mucho cuidado en llenar nuestro Xml, el cual tendra el siguiente formato:
<?xml version="1.0" encoding="utf-8" ?> <ROOT> <alumno> <nombre>Carlos Obando</nombre> <edad>21</edad> <promedio>13</promedio> </alumno> <alumno> <nombre>Roicer Tejedo</nombre> <edad>23</edad> <promedio>14</promedio> </alumno> .......... </ROOT>Llenamos el Xml con unos 8 a mas alumnos no hay problema en el tamaño, pero que sea mayor de 6 para poder ver la utilidad del Objeto Cache.
2. Leyendo el Archivo Xml en DataSet, y poner este en Cache.
Primero debemos recuperar el archivo Xml para llenarlo en el dataSet posteriormete colocamos el DataSet en Cache. Para leer un archivo del servidor, usamos Server.MapPath, para obtener la ruta absoluta del archivo. El codigo siguiente lo hacemos en el Evento Load de la Pagina:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)... 'Introducir aquí el código de usuario para inicializar la página 'CARGANDO EL DATASET dsAlumno.ReadXml(Server.MapPath("Alumnos.xml")) If Not Page.IsPostBack Then Cache.Insert("dsAlu", dsAlumno, Nothing, _ DateTime.Now.AddMinutes(2), Nothing) dgAlumno.DataSource = Cache("dsAlu") dgAlumno.DataBind() End If End SubEl dataSet debe ser una variable publica.
Hay dos formas de colocar algun objeto en la Cache, la forma implicita y la explicita.Implicita: Cache("Key") = Value
Explicita: Cache.Insert("Key", Value, Dependency, ....), esta es la forma que usamos en nuestro ejemplo. (ver mas detalles)
Tambien Colocamos codigo para la paginación, es algo parecido al anterior:
Private Sub dgAlumno_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles dgAlumno.PageIndexChanged 'cambiando el numero de pagina dgAlumno.CurrentPageIndex = e.NewPageIndex 'Verificando si la existe cache o ya se elimino If Cache("dsAlu") Is Nothing Then Cache.Insert("dsAlu", dsAlumno, Nothing, _ DateTime.Now.AddMinutes(2), Nothing) End If dgAlumno.DataSource = Cache("dsAlu") dgAlumno.DataBind() End SubEl parametro DateTime.Now.AddMinutes(2), es para decirle cuanto será la duración de vida de la variable en la aplicación, en este caso solo le damos dos minutos.
3. Contruyendo la pagina Web
Para poder ver los resultados solo necesitamos de un control que en este caso será un DataGrid, llamado dgAlumno, y el dataSet dsAlumno, que lo mencionamos anteriormente, en pantalla los resultados se deberian ver de la siguiente forma:
nombre edad promedio Carlos Obando 21 13 Roicer Tejedo 23 14 Juan Alonso 20 12 Javier Sanchez 19 17 Fabricio Rojas 19 11 < >
4. Comprobando la Cache
Para comprobar el uso de la cache, primero debemos tener la pagina donde agregamos todo, en el browser, sin cerrar la ventana del navegador cambiamos el archivo Xml, editando uno de los alumnos o agregando uno nuevo. Ahora regresamos al navegador y navegamos a travez del dataGrid, veremos que los cambios no se actualizan pero si esperamos unos minutos, podremos ver los cambios reflejados dentro del DataGrid.
5. Opciones del Metodo Cache.Insert()
Uno del paramtros del metodo es CacheDependency, este nos permite que cuando haya un cambio la cache se actualize, por ejemplo en nuestro ejemplo agregaremos una depencia al archivo Alumnos.xml de tal manera que cuando este cambie la cache se actualize, y no espero hasta que finalize, en nuestro caso que no espere los dos minutos para actualizar la cache.
Cache.Insert("dsAlu", dsAlumno, New System.Web.Caching.CacheDependency(Server.MapPath("Alumnos.xml")), _ DateTime.Now.AddMinutes(2), Nothing)Cambiamos el metodo Insert, en el Load y el evento PageIndexChange de la grilla, por esta nueva linea, para agregar la depencia al archivo XMl. Para comprobar devemos ejecutar nuestro WebForm sobre el cual estamos trabajando, navegemos por el datagrid, ahora cambiar nuevamente el archivoXml(no olvidar guardar los cambios en el archivo, en el punto 4 tambien se debe hacer esto), y regresemos a la ejecucion del WebForm, veremos que ahora los datos han sido actualizados!
CONCLUSIONES
- Usar cache principalmente para variables de Aplicacion, y no para variables de session. Hay un objeto cache por cada aplicación web, no se puede compartir el objeto cache para mas de una aplicación web.
- No abusar del uso del Objeto Cache. Recordar que el objeto Cache se almacena en la memoria del servidor, y si intentamos usar cache para todo, podrias saturar la memoria del servidor, solo usar cuando sea necesario.
- Usar para almacenar variables que seran cargas una vez, y esta durara mucho tiempo sin sufrir cambios, por ejemplo cuando recuparamos datos de una fuente de datos, seria una buena opcion la memoria cache, para no estar constantemente viajando al servidor de base de datos.
- Si el objeto cache tiene dependecias, usar el parametro CacheDependency, para asignar la depencia al archivo.
P.D.: Cualquier duda o comentario ahi dejo mi mail, no olviden calificar el articulo. Ah para el articulo, supongo que tienen conocimientos básicos de Aplicaciones ASP.NET, bytes!