| 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; private void Page_Load( object sender, System.EventArgs e) private DataTable GetData() SqlConnection conn = new SqlConnection(); SqlDataAdapter da = new SqlDataAdapter("select * from authors",conn); 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 string _table = args[0].ToString(); _SWriter.Write( _value ); _SWriter.Close(); } |
|
| 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. |