Por Samir A. Mamude
samir@sacola.com.br
Samir Araujo Mamude Tecnólogo em Desenvolvimento para Web, atualmente trabalha com soluções de comêrcio eletrônico e sites com conteúdo dinâmico utilizando a tecnologia .NET Framerwork e C#. Formado em Desenvolvimento para Web

Cache por Objetos

Enquanto aguardamos o lançamento oficial do ASP.NET 2.0 onde teremos recursos melhorados no cache como a classe SqlCacheDependecy juntamente com o SQL Server 2005. Nesse artigo procuro demonstrar uma boa prática de como usar o cache com banco de dados.

Vamos ao exemplo:
- Crie um projeto no Visual Studio.NET do tipo ASP.NET Web Application
- Abra o webform.aspx gerado e importe a classe System.Web.Caching.
- Inclua uma Label chamada "lblMsg" e um controle DataGrid chamado "dgDados"

Código fonte webform.aspx

protected System.Web.UI.WebControls.DataGrid dgDados;
protected System.Web.UI.WebControls.Label lblMsg;

private void Page_Load( object sender, System.EventArgs e)
{
    if ( !Page.IsPostBack )
      dgDados.DataSource = GetData();
      dgDados.DataBind();
}

private DataTable GetData()
{
    if ( Cache["teste"] != null )
    {
       lblMsg.Text = "Informando dados do CACHE";
       return (DataTable)Cache["teste"];
    }
    else
    {
       lblMsg.Text = "Informando dados do BANCO DE DADOS";

       SqlConnection conn = new SqlConnection();
       conn.ConnectionString = "Server=Localhost;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;";

       SqlDataAdapter da = new SqlDataAdapter("select * from authors",conn);
       DataTable dt = new DataTable("authors");

       da.Fill(dt);

       Cache.Insert("teste",dt, new CacheDependency("E:\\Projetos Visual Studio.NET\\SQLCache\\cache\\" + "authors.txt"));

       return dt;
     }
}


Abre o Internet Explorer e faça o teste, no próximo refresh a página será carregada em Cache.
Agora vamos supor que sua base de dados tenha sido atualizada e tão logo queremos que o cache expire automaticamente, bom vamos a solução.

No mesmo projeto crie um novo projeto do tipo Console Application e inclua o seguinte código:

class LimpaCache
{
     public static string  ArquivoTxt = @"E:\Projetos Visual Studio.NET\SQLCache\cache\";

     [STAThread]
     static void Main( string [] args)
     {
          try
          {

          string _table = args[0].ToString();
          Random _r = new Random( unchecked ( ( int ) DateTime.Now.Ticks ) );
          string _value = _r.Next().ToString();
          StreamWriter _SWriter = new StreamWriter(File.Open(ArquivotTxt + _table + ".txt",FileMode.Open,FileAccess.Write));

          _SWriter.Write( _value );

          _SWriter.Close();

          }
          catch ( Exception )
          {
               Console.WriteLine("Argumento nao especificado");
               Console.ReadLine();
          }
     }
}

Essa console application é responsável por gerar um txt com um numero randômico no qual sera o valor utilizado pelo cache, caso o txt tenha sido atualizado o cache é removido.

Agora vamos instruir o SQL Server para executar nosso Console Application.
Primeiramente vamos criar uma User Defined Functions no banco de dados =ubs que é nosso exemplo da aplicação.

Segue o código:
CREATE FUNCTION InvalidaCache (@TableName VarChar (25))
RETURNS INT
AS
BEGIN

     DECLARE @CMDS VarChar (255)
     SET @CMDS = 'C:\SQLCacheEXE.exe ' + @TableName
     EXEC Master..xp_cmdshell @CMDS
     RETURN 0
END

Feito isso temos que criar uma TRIGGER que irá executar essa Function invalidando o cache.
Na tabela Authors coloque a seguinte instrução:
CREATE TRIGGER Authors_Cache
ON
authors
AFTER
     INSERT,
     UPDATE,
     DELETE
AS
BEGIN

     EXEC InvalidaCache 'authors'
END

Finalizando nosso aplicativo faça uma atualização na tabela authors e de um refresh no navegador, o cache é eliminado automaticamente e assim informando o banco de dados atualizado.

Bom espere que essa dica seja útil pois o ganho de performance é consideravelmente bom.
É isso ai e um grande abraço.
Dicas para quem está começando:
Veja os próximos eventos
que você não pode perder :

22/11/2008 SQL Launch -
Linhares - ES
Por : devASPNet


22/11/2008 SQL Launch- SQL Server 2008
Rio Paranaiba - Viçosa - MG
Por : devASPNet


22/11/2008 SQL Launch - SQL Server 2008
Volta Redonda - RJ
Por : devASPNet


22/11/2008 SQL Launch- SQL Server 2008
Franca - SP
Por : devASPNet


22/11/2008 SQL Launch - SQL Server 2008
Canoinhas - SC
Por : devASPNet


22/11/2008 SQL Launch - SQL Server 2008
Tefé - AM
Por : devASPNet


25/11/2008 SQL Launch - SQL Server 2008
Rio de Janeiro - RJ
Por : devASPNet


27/11/2008 SQL Lauch- SQL Server 2008
São Paulo - SP
Por : devASPNet


28/11/2008 SQL Launch - SQL Server 2008
São Paulo - SP
Por : devASPNet


29/11/2008 SQL Launch- SQL Server 2008
Pedro Leopoldo - MG
Por : devASPNet


29/11/2008 SQL Launch- SQL Server 2008
Petropolis - RJ
Por : devASPNet


29/11/2008 SQL Launch
Floriano - PI
Por : devASPNet


29/11/2008 SQL Launch - SQL Server 2008
Rio de Janeiro - RJ
Por : devASPNet


29/11/2008 SQL Launch - SQL Server 2008
Natal - RN
Por : devASPNet


29/11/2008 SQL Launch- SQL Server 2008
Santa Maria - RS
Por : devASPNet


29/11/2008 SQL Launch
Ituiutaba - MG
Por : devASPNet


5/12/2008 Cloud Computing e o Windows Azure
São Paulo - SP
Por : devASPNet


6/12/2008 SQL Server 2008 Community Launch
São Paulo - SP
Por : devASPNet

Leituras imperdíveis para quem está começando:

º Otimizando a performance no ASP.NET::..
º Criando objetos de paginação personalizados na grid::..
º Uma cesta de compras em ASP.NET::..
º Utilizando o Refresh de parâmetros no .NET::..
º ASP.NET FORMS Authentication::..
º Utilizando propriedades dinâmicas no .NET::..
º Corrigindo problemas de deleção em grid com paginação::..
º Cuidado com os componentes de validação::..
º Otimizando o InitializeComponent::..
º Movendo fonte de aplicações entre máquinas::..
º Agilizando a performance da IDE do VS.NET::..
º Utilizando Short Circuit no VB.NET::..


























  Parceiros:
20% de desconto para os membros do grupo na aquisição de livros e inscrição para eventos

Receba dicas de programação e programação .NET:
E-mail:
Incluir Excluir