Compartilhar via


Visão geral do cache no ASP.NET

Geralmente um aplicativo pode aumentar seu desempenho armazenando dados de memória que são acessados com frequência e que requer um tempo de processamento significativo para serem criados.Por exemplo, se seu aplicativo processa grandes quantidades de dados usando lógica complexa e retorna os dados como um relatório acessado frequentemente pelos usuários, é eficiente evitar recriar o relatório sempre que um usuário o solicita.Da mesma forma, se seu aplicativo inclui uma página que processa dados complexos mas que é raramente atualizada, é ineficiente para o servidor recriar essa página em cada solicitação.

Para ajudá-lo a aumentar o desempenho do aplicativo nessas situações, o ASP.NET fornece cache usando dois mecanismos de cache básicos.O primeiro é o cache do aplicativo, que permite que você armazene em cache os dados que você gerar, como um DataSet ou objeto corporativo de um relatório personalizado (custom report business object).O segundo é o cache de saída de página, que salva a saída do processamento da página e reutiliza a saída em vez de reprocessar a página quando um usuário solicita a página novamente.

Cache de aplicativos

O cache de aplicativo fornece uma maneira programática para você para armazenar dados arbitrários na memória usando pares chave/valor.Usar o cache de aplicativos é semelhante a usar estado de aplicativo.Entretanto, diferentemente do estado de aplicativo, os dados no cache de aplicativo são voláteis, significando que eles não são armazenados na memória durante a vida do aplicativo.A vantagem de usar o cache de aplicativos é que o ASP.NET gerencia o cache e remove itens quando eles expiram ou ficam invalidados, ou quando há pouca memória disponível.Você também pode configurar o cache de aplicativo para notificar seu aplicativo quando um item for removido.Para obter mais informações, consulte: Cache de dados de aplicativo.

O padrão ao usar o cache de aplicativos é determinar se um item existe no cache toda vez que você acessar um item, e se isso ocorrer, usá-lo.Se o item não existir, você pode recriar o item e em seguida, colocá-lo novamente em cache.Este padrão assegura que você sempre tem os dados mais recentes no cache.

Para obter mais informações, consulte: Como: Recuperar valores de itens em cache.

Cache de Saída de Página

O cache de saída de página armazena o conteúdo de uma página ASP.NET processada na memória.Isso permite ao ASP.NET enviar uma resposta de página a um cliente sem passar pelo ciclo de vida do processamento de página novamente.Cache de saída de página é especialmente útil para páginas que não são alteradas frequentemente, mas exigem um processamento significativo para serem criadas.Por exemplo, se você estiver criando uma página da Web de alto tráfego para exibir dados que não atualizados frequentemente, o cache de saída de página pode aumentar o desempenho dessa página significativamente.Cache de página pode ser configurado individualmente para cada página, ou você pode criar perfis de cache no arquivo Web.config, que permite que você defina configurações de cache uma vez e usar essas configurações com várias páginas.

Cache de saída de página fornece dois modelos de cache de página: cache de página total e cache de página parcial.Cache de página total permite que todo o conteúdo de uma página seja mantido na memória e usado para atender a solicitações de cliente.Cache de página parcial permite que partes de uma página sejam armazenadas em cache e outras partes sejam dinâmicas.Para obter mais informações, consulte: Cache de páginas ASP.NET.

Cache de página parcial pode trabalhar de duas maneiras: cache de controle e a substituição pós-cache.Cache de controle, às vezes também chamado de cache de fragmento, permite-lhe armazenar partes da saída da página em cache, incluindo as informações em um controle de usuário, e em seguida, marcar o controle de usuário como armazenável em cache.Isso permite que conteúdo específico em uma página seja armazenado em cache, enquanto a página como um todo não é armazenada em cache e portanto recriada cada vez.Por exemplo, se você criar uma página que exibe conteúdo amplamente dinâmico, como informações sobre ações, mas tem seções que são estáticas, como resumos semanais, você pode colocar as seções estáticas em controles de usuário e permitir que elas sejam armazenadas em cache

A substituição pós-cache é o oposto.A página como um todo é armazenada em cache, mas fragmentos dentro da página são dinâmicos.Por exemplo, se você criar uma página que seja estática por períodos de tempo definidos, você pode definir a página inteira para ser armazenada em cache.Se você adicionou um controle Label para a página que exibia o nome do usuário, o Label deve permanecer a mesma para cada atualização de página e cada usuário, mostrando o nome do usuário que solicitou a página antes dela ser armazenada em cache.No entanto, com a substituição pós-cache, você pode configurar a página para ser armazenada em cache, mas marcar seções individuais da página como não armazenáveis em cache.Nesse caso, você poderia adicionar os controles Label a uma seção não armazenável em cache e eles seriam criados dinamicamente para cada usuário e solicitação de página.Para obter mais informações, consulte Cache de Partes de uma Página ASP.NET.

Armazenando Páginas em Cache com Base em Parâmetros de Solicitação

Além de armazenar uma única versão de uma página em cache, o cache de saída de página do ASP.NET fornece recursos para criar várias versões da página que variam de acordo com diferentes parâmetros de solicitação.Para obter mais informações, consulte Armazenando Múltiplas Versões de uma Página.

Remoção de Dados Automática

ASP.NET pode remover dados do cache por um dos desses motivos:

  • Porque há pouca memória no servidor, um processo conhecido como limpeza.

  • Porque o item no cache expirou.

  • Porque a dependência do item mudou.

Para ajudá-lo a gerenciar itens em cache, ASP.NET pode notificar o aplicativo quando itens forem removidos do cache.

Limpeza

Limpeza é o processo de excluir itens do cache quando memória está escarça.Os itens são removidos quando eles não foram acessados por algum tempo ou quando itens são marcados como de baixa prioridade quando adicionados ao cache.O ASP.NET usa o objeto CacheItemPriority para determinar quais itens eliminar primeiro.Para obter mais informações, consulte: Como: Adicionar itens ao cache.

Expiração

Além de através da limpeza, ASP.NET remove itens automaticamente do cache quando eles expiram.Quando você adiciona um item ao cache, você pode defini-lo para expirar conforme descrito na tabela a seguir.

Tipo de expiração

Descrição

Expiração variável

Especifica quanto tempo após um item ter sido acessado pela última vez que ele expira.Por exemplo, você pode definir um item para expirar 20 minutos depois dele ter sido acessado pela última vez no cache.

Expiração absoluta

Especifica que um item expirará em um tempo definido, independentemente da frequência que ele é acessado.Por exemplo, você pode definir um item para expirar às 18:00 ou depois de quatro horas.

Dependências

Você pode configurar a vida útil de um item no cache para ser dependente de outros elementos do aplicativo, como arquivos ou bancos de dados.Quando o elemento o qual um item de cache depende muda, o ASP.NET remove o item do cache.Por exemplo, se o seu site da Web exibe um relatório que o aplicativo cria a partir de um arquivo XML, você pode colocar o relatório em cache e configurá-lo para ter uma dependência no arquivo XML.Quando o arquivo XML muda, o ASP.NET remove o relatório do cache.Quando seu código solicita o relatório, o código primeiro determina se o relatório está no cache, e se não, o código pode recriá-lo.Portanto, uma versão atualizada do relatório está sempre disponível.

O cache do ASP.NET oferece suporte às dependências descritas na tabela a seguir.

Dependência

Descrição

Dependência de chave

Itens no cache do aplicativo são armazenados em pares chave/valor.Dependência de chave permite a um item ser dependente da chave de outro item no cache do aplicativo.Quando o item original é removido, o item que tem a dependência de chave também é removido.Por exemplo, você pode adicionar um item de cache chamado ReportsValid, e em seguida armazenar em cache vários relatórios que dependem da chave ReportsValid.Quando o item ReportsValid é removido, todos os relatórios em cache dependentes da mesma forma são removidos do cache.

Dependência de arquivo

Um item no cache é dependente de um arquivo externo.Se o arquivo for modificado ou excluído, o item em cache é removido.

Dependência SQL

Um item no cache é dependente de alterações de uma tabela de um banco de dados a Microsoft SQL Server 2005, SQL Server 2000, ou SQL Server 7.0.Para SQL Server 2005, um item pode ser dependente de uma linha em uma tabela.Para obter mais informações, consulte Armazenamento em ASP.NET com a Classe SqlCacheDependency.

Dependência agregada

Um item no cache é dependente de vários elementos por meio do uso da classe AggregateCacheDependency.Se qualquer uma das dependências mudarem, o item será removido do cache.

Dependência personalizada

Um item no cache é configurado com uma dependência que você cria no seu próprio código.Por exemplo, você pode criar uma dependência de cache de Web Service personalizável que remove dados do cache quando uma chamada a um Web Service resulta em um valor particular.

Notificação de Remoção de Item do Cache do Aplicativo

Você pode ser notificado quando um item é removido do cache do aplicativo.Por exemplo, se você tiver um item que leva uma considerável quantidade de tempo de processamento para ser criado, você pode ser notificado quando ele é removido do cache para que você possa substituí-lo imediatamente.Como resultado, na próxima vez o item for solicitado, o usuário não terá que aguardar que ele seja processado.Para obter mais informações, consulte Como: Notificar an aplicativo When an Item Is Removed from the cache.

Consulte também

Tarefas

Como: Cache de saída de página com dependências de arquivo

Conceitos

Cache de páginas ASP.NET

Cache de dados de aplicativo

Armazenamento em ASP.NET com a Classe SqlCacheDependency