Desenvolvimento - C#

Nova maneira de usar cache com .NET

Desde a primeira versão do .NET, muitas coisas foram mudadas. Muitos desenvolvedores usam ainda a maneira antiga, sem saber que existe uma maneira nova de se fazer e mais eficaz. Hoje o que queria informar e mostrar é a maneira de habilitar cache dentro do aplicativo, tudo isso dentro do código C#.NET ou VB.NET sem precisar colocar nada dentro do arquivo .ASPX.

por Mauricio Junior



          Desde a primeira versão do .NET, muitas coisas foram mudadas. Muitos desenvolvedores usam ainda a maneira antiga sem saber que existe uma maneira nova de se fazer e mais eficaz.

          Hoje o que queria informar e mostrar é a maneira de habilitar cache dentro do aplicativo, tudo isso dentro do código C#.NET ou VB.NET sem precisar colocar nada dentro do arquivo .ASPX.

Usado:

Ferramenta: Visual Studio .NET 2010

Linguagem: C#.NET

Plataforma: ASP.NET (web)

          Todo o teste pode ser feito usando a plataforma da Microsoft no seu próprio computador. Existem também várias maneiras de fazer uma mesma coisa, vou tentar mostrar algumas maneiras.

          Para quem não sabe, o cache é uma maneira de evitar que a página seja atualizada no servidor buscando dados, ou a busca de informações já contidas na memória do browser. Dessa maneira, as informações são apresentadas rapidamente diferentemente da primeira entrada na página.

          As páginas podem ter cache por algum tempo, horas, dias ou anos; ou simplesmente não ter cache de uma determinada página. Na página desabilitada, a cada atualização os dados serão atualizados do zero.

          Para as páginas que possuem cache, mesmo sendo atualizada clicando no botão refresh do browser, a página não carrega os dados do zero, consumindo assim menos memória do servidor. Após passar o tempo, a página é atualizada.

Exemplo feito

          O exemplo que fiz, mostra que o tempo não é atualizado mesmo clicando no botão refresh.  Após terminar o tempo, a página é atualizada no clique.

Tirando o Cache

          O mais clássico é usar o Response.CacheControl. (Code 1).

Response.CacheControl = "Private";

Response.CacheControl = "no-cache";

Code 1

          Outra maneira é colocar código dentro do arquivo de configuração: Web.config. (Code 2).

    <system.web>

        <!-- Remove o cache-->

        <httpRuntime sendCacheControlHeader="false"/>

    ...

Code 2

          No Code 2, nenhum cache é atribuído as páginas de todo o projeto. Com ele você pode atribuir o cache em páginas específicas.

Colocando o cache

          Agora vou mostrar duas maneiras de atribuir o cache para uma página específica. Peço para que coloque em um arquivo .aspx e não na .masterpage. (Code 3)

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetMaxAge(new TimeSpan(1, 0, 0));

Code 3

          No Code 3, foi atribuído o cache de 1 hora para a página. O segundo zero equivale a minutos e o terceiro a segundos.

          Outra maneira é adicionar o tempo antes de habilitar o public. (Code 4).

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));

Response.Cache.SetCacheability(HttpCacheability.Public);

Code 4

          Note que no Code 4, depois de 60 segundos o cache expira. Segue o Code 5 que mostra o exemplo real feito para mostrar que funciona. Code 5

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3_Cashe._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Label ID="lblTempo" runat="server"></asp:Label>

    </div>

    </form>

</body>

</html>

Code 5 – Arquivo .ASPX

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WebApplication3_Cashe

{

    public partial class _Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));

            Response.Cache.SetCacheability(HttpCacheability.Public);

            lblTempo.Text= "Tempo: " + DateTime.Now.ToString();

        }

    }

}

Code 6 – código .CS

          Mesmo clicando F5 para atualizar a página, os segundos não serão mudados enquanto os 60 segundos não se passarem. Espero que tenha gostado, fico por aqui e qualquer dúvida pode entrar em contato pelo site.

Mauricio Junior

Mauricio Junior - Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; . Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A.
Blog:
blog.mauriciojunior.org
Site pessoal: www.mauriciojunior.org