Olá! Quarta Feira, 23 de Maio de 2012.



Dicas CódigoFonte.net
Terça Feira, 30 de Outubro de 2007

Compactando ViewState – ASP.NET

Antes de iniciarmos esse artigo, irei explicar de forma rápida o que seria um ViewState.

“A grosso modo”, ViewState é uma string que armazena informações sobre o estado da página em um campo oculto dentro da mesma.

Geralmente quanto maior a complexibilidade de uma página, maior será as informações armazenadas em seu ViewState. Chegando a um ponto em que o ViewState prejudica o carregamento da página.

Em muitos casos a solução para este problema seria eliminar o ViewState, mas agora poderemos partir para outra solução.

Usando a lib GZipStream podemos compactar o viewstate e com isso reduzir em 45% o tamanho do ViewState da página.

Veremos a partir de agora como compactar e descompactar dados na memória.
Nossa Classe de compactação usará System.IO.Compression e System.IO;

Criaremos em nossa classe dois metodos estáticos:
public static byte[] CompactarViewState(byte[] bytes) e
public static byte[] DescompactarViewState(byte[] bytes)

Nossa classe herdará de : System.Web.UI.Page

public class ClassCompactarViewState: : System.Web.UI.Page
{
      public ClassCompactarViewState()
      {
            //
            // TODO: Add constructor logic here
            //
      }
 
 
    public static byte[] CompactarViewState(byte[] bytes)
    {
        MemoryStream MSsaida = new MemoryStream();
        GZipStream gzip = new GZipStream(MSsaida,
                          CompressionMode.Compress, true);
        gzip.Write(bytes, 0, bytes.Length);
        gzip.Close();
        return MSsaida.ToArray();
    }
 
    public static byte[] DescompactarViewState(byte[] bytes)
    {
        MemoryStream MSentrada = new MemoryStream();
        MSentrada.Write(bytes, 0, bytes.Length);
        MSentrada.Position = 0;
        GZipStream gzip = new GZipStream(MSentrada,
                          CompressionMode.Decompress, true);
        MemoryStream MSsaida = new MemoryStream();
        byte[] buffer = new byte[64];
        int leitura = -1;
        leitura = gzip.Read(buffer, 0, buffer.Length);
        while (leitura > 0)
        {
            MSsaida.Write(buffer, 0, leitura);
            leitura = gzip.Read(buffer, 0, buffer.Length);
        }
        gzip.Close();
        return MSsaida.ToArray();
    }
 
    protected override object LoadPageStateFromPersistenceMedium()
    {
        string viewState = Request.Form["__VSTATE"];
        byte[] bytes = Convert.FromBase64String(viewState);
      // DESCOMPACTAR VIEWSTATE   
        bytes = ClassCompactarViewState.DescompactarViewState(bytes);
        LosFormatter formatter = new LosFormatter();
        return formatter.Deserialize(Convert.ToBase64String(bytes));
    }
 
    protected override void SavePageStateToPersistenceMedium(object viewState)
    {
        LosFormatter formatter = new LosFormatter();
        StringWriter writer = new StringWriter();
        formatter.Serialize(writer, viewState);
        string viewStateString = writer.ToString();
        byte[] bytes = Convert.FromBase64String(viewStateString);
     // COMPACTAR VIEWSTATE
        bytes = ClassCompactarViewState.CompactarViewState(bytes);
        ClientScript.RegisterHiddenField("__VSTATE", Convert.ToBase64String(bytes));
    }
 }  


Depois de constuir nossa classe, em nosso WebForm, iremos criar uma herança para ClassCompactarViewState

Como segue abaixo:


public partial class _Default : CompactarssViewState
{
    protected void Page_Load(object sender, EventArgs e)
    { 
    }
} 


Bom pessoal, até o próximo artigo!

[]’s

Francke Peixoto

Comentários do artigo [Novo comentário]

Nenhum comentário, seja o primeiro a comentar.
Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:






CodigoFonte.net » CodigoFonte.eti.br » Compre De Tudo » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010

Procurando Notebooks, Câmeras Digitais, iPhones?

CompreDeTudo.com