Dev (Back & Front)ARTIGO

Cache usando Visual Studio.NET 2005

Quero hoje mostrar na prática como utilizar “cache” em sistemas ASP.NET,
ou seja, sistemas e sites WEB. Nos dias de hoje, com novas ferramentas e
controles da ferramenta do Visual Studio.NET, o sistema do
tipo WEB tem entrado mais no mercado com aceitação de clientes, tanto para
intranet como para internet.

Problema

Com o uso popular
da internet, a briga para carregar o site na tela o mais rápido possível a um custo
baixo é prioridade, ou seja, mesmo que a conexão do usuário final seja lenta, o
site deve aparecer em seu browser de uma forma rápida e eficaz.
Nem todo usuário possui uma conexão banda larga em casa, com isso existe demora
do carregamento do site ou sistema. Na demora excessiva da funcionalidade, a
empresa poderá perder clientes e vendas, dependendo do estabelecimento.

Solução

O recurso no .NET
chamado “cache” veio para tirar todo esse problema de lentidão no sistema ou
site, para páginas que possuem os mesmos valores e não têm problemas para
manter os dados em “cache”, não precisando ir ao banco de dados; essa solução é
ideal e objetiva para o desenvolvedor. Pode melhorar consideravelmente toda
página, principalmente as complicadas, que precisam ir ao banco de
dados a todo o momento e mostrar ao usuário as informações do BD.

O “cache” pode
ser feito de duas maneiras no ASP.NET:

  1. Com
    código dentro da página ASPX.CS ou ASPX.VB; ou
  2. Colocando
    uma tag no cabeçalho do arquivo ASPX.

Codificando

  • Primeira forma:

Ativando o
“cache” em 10 segundos. (Referência c-1.1)

 protected void<br />GetCache()<br /><br />    {<br /><br />        //Uso do cache de saída do servidor<br /><br />        Response.Cache.SetCacheability(HttpCacheability.Server);<br /><br /><br /><br />        //Mostra que a página ficará ativa por 10 segundos<br /><br />        //mantendo o cache<br /><br />        Response.Cache.SetExpires(DateTime.Now.AddSeconds(10));<br /><br />    }

Referência: c-1.1

Note que criei um
método chamado GetCache(). Ele não recebe nem envia valores e é protegido
para aquela classe específica. Ele apenas pega o uso do “cache” no
servidor, ou seja, se houver outro usuário no site ou sistema navegando, será
detectado automaticamente e o sistema usará o mesmo “cache”, dados já
exibidos para o próximo usuário que entrar, esse tempo é de 10 segundos. Com
isso não precisará ir ao banco de dados.

Esses 10 segundos
podem ser alterados para quantos segundos quiser. Geralmente não é bom colocar
muito tempo, tente encontrar um tempo legal e ideal para seu sistema e site.

Depois de criar o
método, basta apenas acrescentar dentro do método Load da página principal
.ASPX. (Referência c-1.3)

  <br /><br />    protected void Page_Load(object sender, EventArgs e)<br /><br />    {<br /><br />        GetCache();<br /><br />        if (!Page.IsPostBack)<br /><br />        {<br /><br />            preencheDataList();<br /><br />        }<br /><br />    }

Referência: c-1.3

O método foi
acrescentado junto ao método Page_Load da página, o que resolve muito o
problema de lentidão e carregamento das informações.

  • Segunda forma:

A outra maneira
de ativar o “cache” da página, ou seja, “cache” de saída, é alterar o
cabeçalho da página específica (Referência c-1.4).

<br />   <%@ OutputCache Duration="10" VaryByParam="None" %>

Referência: c-1.4

Exemplo na
página (Refência c-1.5):

Referência: c-1.5

Os atributos e
valores OutPutCache Duration e VaryByParam devem estar especificados
corretamente na página.

OutPutCache
Duration:
significa
quanto tempo a página será armazenada, esse tempo é medido em segundos;

VaryByParam: significa que quando houver um parâmetro a ser
passado do tipo “query string”, o mesmo pode ser colocado no atributo. Dessa
forma será feito “cache” da página mesmo que haja parâmetros que recebam ou
não. No meu caso, não precisarei de parâmetro, coloquei “none”.

Dúvida

Qual das duas
formas usar? É preciso testar. Os dois tipos funcionam corretamente para a
função e desempenho. A minha opinião e preferência é usar a primeira opção
mostrada, não gosto de mexer muito na página .ASPX, gosto mesmo de codificar em
ambiente “code behing”; mas a outra forma também funciona corretamente.

Espero ter
ajudado de alguma forma.

Com mais de 20 anos trabalhando no mercado de tecnologia. Mestre em Engenharia Elétrica voltada para o mundo mobile, com mais de 20 livros publicados e cerca de 700 artigos publicados com intuito de ajudar àqueles que querem aprender a programar (site, software, desktop, serviços, api e mobile). Site pessoal: https://www.mauriciojunior.net - MVP, MCAD, MCP Microsoft

Ver perfil