ASP.NET 4.0 – Mejorando el Rendimiento con ViewStateMode

Basado en el artículo:
http://geekswithblogs.net/ranganh/archive/2009/08/14/whatrsquos-new-in-asp.net-4.0.aspx

Todos sabemos que el tema  del ViewState nos puede causar problemas de rendimiento en nuestras aplicaciones, cuando crece debido a que existe una gran cantidad de webcontrols anidados en nuestra página, si bien podemos setear la propiedad EnableViewstate en False, con lo cual no se mantendrá el estado de este control entre Postback, existe la complicación que si el control contendedor, por ejemplo un panel, tiene la propiedad EnableViewstate en True, los controles contenidos, aunque su propiedad EnableViewState esté en False, de todas maneras se mantendrá el estado en el ViewState , es decir, existe una herencia del valor de la propiedad, lo que resulta incoherente y muchas veces los esfuerzos por disminuir el ViewState , nulos.

Ahora, bien, ASP.NET 4.0 viene con la nueva propiedad ViewStateMode, que en resumen, nos ayuda a determinar eficazmente para cada control si el ViewState va a estar habilitado, deshabilitado, o heredado.

La propiedad ViewStateMode nos va a permitir habilitar el ViewState para un control individual incluso si a nivel de página, el ViewState está deshabilitado.

Para desactivar el ViewState de una página y activarlo para un control específico, deberíamos es setear la propiedad  EnableViewState de la página y el control en true, luego setear la propiedad ViewStateMode de la página como Disabled y setear la propiedad ViewStateMode del control como habilitado.

La propiedad ViewStateMode de una página o de un control tiene efecto siempre y cuando se establece la propiedad EnableViewState en true.

Los posibles valores del ViewStateMode son:

Inherit Hereda el valor del ViewStateMode desde el control Padre (contenedor)
Enabled

Habilita el ViewState para el control incluso si el control padre tiene el estado ViewStateMode deshabilitado  (El control Padre debe tener el ViewState habilitado)

Disabled Deshabilita el ViewState para este control, incluso si el control padre tiene el ViewState Activado (Independiente si tiene el ViewStateMode Habilitado o Deshabilitado)

Veamos un ejemplo para cada uno de los estados que anteriormente vimos, tomemos el siguiente escenario:

<asp:Panel BackColor="Aqua" ID="panel1" runat="server" ViewStateMode="Enabled">

Desabilitado: <asp:Label ID="label1" runat="server"  Text="Valor seteado declarativamente"  ViewStateMode="Disabled"  />
<
br /> 
Habilitado: 
<asp:Label ID="label2"  runat="server" Text="Valor seteado declarativamente" ViewStateMode="Enabled" /> 
<hr /> 
  <asp:button ID="Button1" runat="server"  Text="Generar Postback" />

</asp:Panel>

Lo que nos deja, en la vista diseño:

image

y en el código programático:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
  panel1.BackColor = Drawing.Color.LightGray
  label1.Text = "Valor establecido por código programático"
  label2.Text = "Valor establecido por código programático"
End If
End Sub

Según lo anterior, en la primera carga de página (cuando no es un postback) se va a ejecutar el código que está dentro del la condición del Page_Load.

image

Ahora, cuando generamos el Postback, veremos lo siguiente:

image

Como vemos, ocurrió postback , ya no entramos en la condición del Page_load, mediante el contenido del ViewState se mantuvo el estado del panel (color Gris), y el valor del segundo label (habilitado), que es el label con la propiedad ViewStateMode="Enabled" , en tanto ViewStateMode="Disabled" no tiene información en su ViewState, no mantiene el estado y por consiguiente se setea con lo que se estableció en el código declarativo.

De este modo si reviso el viewstate, vemos que pesa aproximadamente 184 bytes.

image

A continuación vamos a setear la propiedad del panel1 ViewStateMode="Disabled", que corresponde al contenedor de los labels. El resultado :

image

Al igual que la anterior prueba, tampoco el panel mantiene el estado por lo que se setea la propiedad con lo seteado en el código declarativo, pero sin embargo, label2, posee su mantención de estado. Por otro lado, si revisamos el tamaño del ViewState generado vemos que pesa aproximadamente 153 bytes.

image

Si bien, esto es un ejemplo sencillo, podemos proyectar esta funcionalidad para páginas con muchos webcontrols anidados, permitiendo, de esta manera, disminuir el tamaño del viewstate, seleccionando eficazmente, los controles que si queremos que mantengan su estado.

Espero que te haya servido!
Nos vemos,
Gonzalo

[Patrones de Diseño] ScreenCast Capitulo 3 – Patrón Builder

Hola que tal, sigo con la serie de Screencast, por favor, recuerden darme feedback si algo no se entendió o lo explique mal. En esta sesión revisaremos el patrón de diseño creacional Builder.

PD: Prefiere siempre descargar el video, ya que en ScreenCast.com hay banda de ancha limitada, tendría que pagar para aumentarla :S

image

  • Descarga la ppt utilizada aquí
  • Descarga el ejemplo aquí
  • Descarga el video aquí.  <- (Prefiere esta opción!!)

    Ver el Screencast (puede, que si ya se sobrepasó el límite ancho de banda , no veas el video, así que mejor descárgalo!)

     

    Espero que te sea de utilidad,
    Nos vemos!
    Gonzalo

  • Tech Days 2009 El Mega Evento Tecnológico Microsoft para Devs e ITPros

    Por primera vez en Chile y en español se realizará, el próximo 29 de Septiembre, Microsoft  Tech Days Chile 2009, un evento pensado especialmente para profesionales de informática y desarrolladores.

    Un día completo con más de 20 sesiones técnicas a lo largo del día, con expertos nacionales e internacionales, la posibilidad de compartir con miles de colegas y de estar en contacto con las últimas innovaciones tecnológicas!!

    Microsoft Tech Days, un evento que los ayudará a resolver los desafíos actuales del mundo informático y a prepararse para las innovaciones del mañana.

    Regístrate ahora mismo en:
    http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032421498&Culture=es-CL

    Yo voy a estar de Orador, sobre Gadget y ASP.NET 4.0, así que si quieres charlar un rato de tecnología, hablar de algún tema del blog, o decirme “que basura son tus artículos” jejeje, nos encontramos allá 🙂

    image

    Recuerden registrase, vale?

    Saludos,
    Gonzalo

    [Patrones de Diseño] ScreenCast Capitulo 1 – Patrón Singleton

    Hola que tal? Estoy contento por que al fin me pude hacer un tiempo para comenzar a hacer una serie de screencast de patrones de diseño, me gustaría que me dieras feedback sobre esto.

    La idea es conceptualizar un poco los patrones de diseño, con ejemplos y explicados (o por lo menos trato de explicarlos, jejej) de manera sencilla.

    El primer patrón de diseño que revisaremos es el Singleton, dentro de la semana termino el Factory.

    Sin más preámbulos, te dejo el screenCast, espero que te sirva!

    URL:http://www.youtube.com/watch?v=RzE8Nb6hx2E

     

    Saludos!
    Gonzalo

    [Off-Topic] Ver DivX con subtítulos en la XBOX 360

    image

    Eso, que hace tiempo quería ver videos DivX con subtítulos en la XBOX 360, pero ni siquiera lo intentaba por falta de tiempo y por que todos los foros decían que no se podía, que había que pegarlos antes. Entonces buscando, encontré este programa tversity, que tiene disponible una versión free para su descarga

    Luego debes ir a la opción Settings

    image

    Y marcar la opción “When to transcode” –> Always

    Luego , puedes reiniciar el servicio de compartir (o cerrar el programa y volver a correrlo en modo administrador, yo estoy con Windows 7)

    image

    Luego, en la Xbox cuando vayas a tu Galería Multimedia, de videos, vas a ver :

    PD: Las fotos las saque desde mi celular, mi cámara no tenia pilas 😛

    image

    Y luego exploras la librería de videos que compartiste con tversity, y simplemente seleccionas el video  y luego…

    image

     

    …Viendo un DivX con subs, eso si, el video se va a demorar unos 30 segundos en partir, y también recuerda que debes tener el nombre del archivo de los subtítulos igual que al del video, solo cambia la extensión, por ejemplo:

    • Video:chaleitorIV.avi
    • Subtítulos: chaleitorIV.srt

    Este programa queda corriendo en tu equipo y ni te das cuenta( en cierto porcentaje) de que se esta haciendo streaming de video, de hecho yo estoy compartiendo por WIFI  y se ve bastante bien.

    Grande XBOX!!!! 😀

    Espero que te sirva (nada que ver con ASP.NET) pero bueno, la blanquita merece muchos post!.

    Saludos,
    Gonzalo

    [ChalaGauget] Nuevo Skin para Control Circular! MiReloj :)

    Este es un nuevo Skin para el Gauge Circular, basado en mi reloj :P,  no es el reloj más cool de la historia, pero da la hora, que es lo que importa :).

    image

    Para probarlo, cópialo en la carpeta raíz y luego en el archivo Gauge.js cambia la propiedad:

    var MODELOXAML = "miRelog.xaml";

    DESCARGA EL SKIN

    Espero que les sirva,
    Saludos
    Gonzalo

    [Off-Topic] Windows 7 descargado!, pero Demonios! me da flojera formatear nuevamente!

    Bueno, es un pensamiento, tengo Windows 7 RC, y funciona de maravilla, tengo todo lo que necesito (y no es poco!) estoy muy contento con la performance de W7, acabo de descargar la versión RTM, me imagino que está, como decimos en Chile “Filete” (Muuy buena), lo único, es que ya tengo mi sistema a punto, y tengo mucho trabajo para este fin de semana como para quedarme sin el portátil por un buen rato mientras instalo todo de nuevo. No estoy criticando para nada a Windows 7, si no a mi poco tiempo! muchos de los computines que conozco trabajan los fines de semana, así que voy a tratar de animarme para un trasnoche de happy install fest!

    Nos vemos!!!!

    Saludos,
    Y este post, no le sirve a nadie!, ajjajaa

    Chao!
    Gonzalo