in ASP.NET

Dica: Cache expiration, diferenças entre absolute expiration e sliding expiration

Desde suas primeiras versões o ASP.NET possui diversos recursos para os desenvolvedores aumentarem a performance de suas aplicações. A namespace System.Web.Caching fornece várias classes e maneiras para cachear os dados que são utilizados com maior frequência em nossas aplicações.

A classe Cache é a principal delas, ela é um dicionário que permite armazenar objetos em memória, com isso ela também oferece algumas funcionalidades como: validade dos objetos (tempo de expiração) e métodos que adicionam e removem os objetos do Cache, alem dessas funcionalidades o Cache oferece a opção de se adicionar objetos com uma dependência (Sql, arquivos, etc) que ao ser modificada removerá o objeto do Cache. Também pode ser criada uma função de calback para ser executada quando o objeto for removido do Cache.

O tempo de expiração do Cache tem duas maneiras de ser configurado:

  • Absolute Expiration: O objeto em Cache irá expirar em uma determinada data, a partir do momento de inserção do objeto no Cache, independente do seu uso ou não.
  • Sliding Expiration: O objeto em Cache irá expirar após o tempo configurado, a partir da ultima requisição do objeto em Cache.

O método Insert do objeto Cache possui diversos oveloads, entre eles o que nos permite configurar a dependência do cache e o tempo de expiração:

public void Insert(
	string key,
	Object value,
	CacheDependency dependencies,
	DateTime absoluteExpiration,
	TimeSpan slidingExpiration
)

Para configurar eles temos dois campos na classe Cache que podemos utilizar:

o primeiro é utilizado quando vamos configurar a expiração com Sliding Expiration, ele retorna um valor igual ao Max do DateTime (12/31/9999 11:59:59 PM).

public static readonly DateTime NoAbsoluteExpiration

e o segundo é utilizado quando configuramos o tempo de expiração com Absolute Expiration, ele retorna um valor igual ao TimeSpan.Zero.

public static readonly TimeSpan NoSlidingExpiration

No exemplo abaixo eu uso Absolute Expiration, o objeto ficará no Cache por 2 minutos:

var objetoCacheado = "Objeto no Cache";

//Absolute Expiration
Cache.Insert("Absolute", objetoCacheado, null, DateTime.Now.AddMinutes(2),
            System.Web.Caching.Cache.NoSlidingExpiration);

Neste segundo exemplo, com Sliding Expiration o objeto ficará no Cache por 2 minutos após o ultimo acesso a ele:

var objetoCacheado = "Objeto no Cache";

//Sliding Expiration
Cache.Insert("Sliding", objetoCacheado, null, System.Web.Caching.Cache.NoAbsoluteExpiration,
                        TimeSpan.FromMinutes(2));

Espero que esta dica seja útil.

abs

Rodolfo

  • http://www.facebook.com/people/Rodrigo-Liz/100000668981472 Rodrigo Liz

    se for pra excluir um comentario postado pelo usuario como posso estar fazendo isso será que podia me dar esta ajuda obrigado

  • http://www.rodolfofadino.com.br/2013/05/cache-net-cache-de-objetos/ Cache + .NET: Cache de Objetos – // Rodolfo Fadino

    […] duas maneiras de configurar o tempo de expiração: sliding expiration e absolute expiration (detalhes).O tempo de expiração do Cache tem duas maneiras de ser […]

  • http://tecnologia.minhavida.com.br/2013/05/cache-net-cache-de-objetos/ Cache + .NET: Cache de Objetos | Blog de Tecnologia do Minha Vida

    […] duas maneiras de configurar o tempo de expiração: sliding expiration e absolute expiration (detalhes).O tempo de expiração do Cache tem duas maneiras de ser […]