Feed on Posts or Comments 21 November 2008

c# & programação Rangel on 03 Ago 2007 08:38 am

Reduzindo o ViewState

Não sou muito fã de tecnologias Microsoft, mas acho que o .NET tem lá suas vantagens, uma delas pode ser o ViewState, se você está se perguntando por que o “pode ser” é bem simples, quando seu ViewState sai do controle pode ter certeza, que seus clientes ou usuários vão começar a reclamar de lentidão

1 - O que é ViewState

ViewState é a tecnologia utilizada pelo .NET da Microsoft para facilitar a vida dos desenvolvedores, a funcionalidade básica dele é manter dados (ou configurações) da página entre postbacks (reload), como textos dinâmicos que são alterados de acordo com alguma ação na página, ou linhas de um grid que mudam a formatação dependendo dos dados que sâo inseridos nela.

2 - Como é na prática (se você não estiver interessado na implementação vá para o item 3)

O .NET cria (ou renderiza) em sua página algumas funções JavaScript e alguns componentes escondidos (input hidden do html), em um deles é feita a mágica do ViewState onde os dados sâo encriptados e formam uma grande String, quando sua página efetua um PostBack, o .NET decripta esses dados e recarrega suas configurações nos devidos locais.

3 - Me mostre o problema

O problema é quando começcamos a usar o ViewState demais guardando objetos (sim você pode guardar, desde que sejam Serializable) , ou até informação demais, já vi gente guardar a mesma lista que tinha em uma tabela lá. O ViewState começa a ficar grande demais e derrubando a performance da página (localmente tudo parece perfeito - em 99% dos casos).

4 - Como resolver e reduzir o ViewState

Aí vão algumas dicas que aprendi durante o percurso de ViewState’s gigantes (páginas de até 1,5 MB)

Coloque no HTML o que é fixo
Tente deixar o máximo de configurações fixas na página (HTML), Labels, TextBox, Combos que tiverem valores fixos adicione os mesmos direto na página, adiciona-los programaticamente vai só lhe trazer problemas já que o ViewState aumentará sem necessidade, configurações como tamanho, maxlength, cor, ou seja, tudo que não for variável coloque na própria página e importante sete o EnableViewState desse componente como false.

Não para objetos sim para IDs
Troque os objetos (se vierem de algum banco de dados) que você guarda por ID’s (algum tipo de código de identificação) e recarrege eles através do banco quando seus dados originais forem necessários.

Se for necessário mesmo use String
Se for realmente necessário usar o ViewState procure pelo menos salvar sempre Strings, o porque disso é que o ViewState (na verdade a classe que faz o Encoding) dos objetos no ViewState é feita para Strings, por exemplo, salvar um array de números é muito melhor (e menor) feito se eles forem em String do que em int.

Essas são as dicas básicas, achei boas refrências para melhorar diverseos componentes, um deles ( e o que faz muita diferença) é o Datagrid que você encontrará boas informações (em inglês) no CodeProject.

Saiba Mais (recomendo):
Help! My ViewState Is Out Of Control

DataGrid’s ViewState optimization

Qualquer dúvida pode me perguntar que estamos ai pra isso!

Até!

0100100001010010

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply