ASP.NET: Otimizando a geração do viewState com uso da sessão

Veja nesta dica, como otimizar a geração do viewState com uso da sessão em páginas ASP.NET.

ASP.NET: Otimizando a geração do viewState com uso da sessão

O ASP.NET faz muito uso do campo hidden __VIEWSTATE para guardar informações sobre os webControls através dos postbacks.

O problema é que o ViewState pode crescer muito, especialmente quando utilizando gridViews. Esse crescimento afeta a performance do site, pois as paginas ficam maiores, consumindo mais transferência entre o servidor e o client.

Uma solução para isso é armazenarmos o viewState no ambiente de sessão. Desta forma o estado dos webControls estarã em sessão e não na página, evitando uma grande transferência.

Isso é possível desde o .NET 1.1, mas ficou muito mais fácil com o uso de pageAdapters no .NET 2.0

Primeiramente criamos uma classe pageAdapter e fazemos overrides no método que gera o objeto de persistência, substituindo o objeto por uma persistência em sessão :

Imports Microsoft.VisualBasic

Public Class MeuAdapter
Inherits System.Web.UI.Adapters.PageAdapter

Public Overrides Function GetStatePersister() As System.Web.UI.PageStatePersister

Return (New SessionPageStatePersister(Me.Page))
End Function

End Class

Depois configuramos o pageAdapter no web.config de forma que seja utilizado por todas as páginas :

<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page"
adapterType="MeuAdapter" />
</controlAdapters>
</browser>
</browsers>


Pronto, o viewState das páginas estará sendo guardado em sessão ao invés de ser gerado na página.
Mas fique atento: Se a sessão estiver no stateServer ou SQLServer a performance pode piorar ao invés de melhorar. Faça testes cuidadosos nesses casos.



Artigos relacionados