Armazenamento em cache em aplicativos do .NET Framework

O cache permite que você armazene dados na memória para acesso rápido. Quando os dados são acessados novamente, os aplicativos podem obter os dados do cache, em vez de recuperá-los da fonte original. Isso pode melhorar o desempenho e a escalabilidade. Além disso, o cache torna os dados disponíveis quando a fonte de dados está temporariamente indisponível.

O .NET Framework fornece a funcionalidade de cache, que pode ser usada para melhorar o desempenho e a escalabilidade dos aplicativos cliente e de servidor do Windows, incluindo o ASP.NET.

Observação

No .NET Framework 3.5 e em versões anteriores, o ASP.NET fornecia uma implementação de cache na memória no namespace System.Web.Caching. Nas versões anteriores do .NET Framework, o cache só estava disponível no namespace System.Web e, portanto, exigia uma dependência das classes do ASP.NET. No .NET Framework 4, o namespace System.Runtime.Caching contém APIs projetadas para aplicativos Web e não Web.

Armazenando dados em cache

É possível armazenar as informações em cache usando classes no namespace System.Runtime.Caching. As classes de cache desse namespace fornecem os seguintes recursos:

  • Tipos abstratos que fornecem a base para a criação de implementações personalizadas de cache.

  • Uma implementação concreta de cache de objetos na memória.

A classe de cache de base abstrata (ObjectCache) define as seguintes tarefas de cache:

  • Criação e gerenciamento de entradas de cache.

  • Especificação de informações de expiração e remoção.

  • Gatilho de eventos que são acionados em resposta a alterações nas entradas de cache.

A classe MemoryCache é uma implementação de cache de objetos na memória da classe ObjectCache. É possível usar a classe MemoryCache para a maioria das tarefas de cache.

Observação

A classe MemoryCache é modelada no objeto de cache do ASP.NET definido no namespace System.Web.Caching. Portanto, a lógica de cache interna é semelhante à lógica fornecida em versões anteriores do ASP.NET.

Para obter um exemplo de como usar o cache em um aplicativo WPF, consulte Passo a passo: Armazenando dados de aplicativo em cache em um aplicativo WPF.

Armazenando em cache nos aplicativos ASP.NET

As classes de cache do namespace System.Runtime.Caching fornecem funcionalidade de armazenamento de dados em cache no ASP.NET.

Observação

Se o aplicativo for direcionado para o .NET Framework 3.5 ou anterior, você precisará usar as classes de cache definidas no namespace System.Web.Caching. Para obter mais informações, consulte Visão geral do cache do ASP.NET.

Observação

Ao desenvolver novos aplicativos, recomendamos o uso da classe MemoryCache. A API fornecida no namespace System.Runtime.Caching é como a API fornecida no namespace Cache. Portanto, a API será familiar se você usou o cache em versões anteriores do ASP.NET. Para obter um exemplo de como usar o cache em aplicativos ASP.NET, consulte Passo a passo: Armazenando dados de aplicativo em cache no ASP.NET.

Cache de saída

Para armazenar dados de aplicativo em cache manualmente, use a classe MemoryCache no ASP.NET. O ASP.NET também dá suporte ao cache de saída, que armazena a saída gerada de páginas, controles e respostas HTTP na memória. É possível configurar o cache de saída de forma declarativa em uma página da Web ASP.NET ou usando as configurações do arquivo Web.config. Para obter mais informações, consulte Elemento outputCache para armazenar em cache (esquema de configurações do ASP.NET).

O ASP.NET permite estender o cache de saída criando provedores de cache de saída personalizados. Usando provedores personalizados, você pode armazenar o conteúdo armazenado em cache usando outros dispositivos de armazenamento, como discos, armazenamento em nuvem e mecanismos de cache distribuído. Para criar um provedor de cache de saída personalizado, crie uma classe que é derivada da classe OutputCacheProvider e configure o aplicativo para usar o provedor de cache de saída personalizado.

Armazenando em cache nos serviços REST do WCF

Para os serviços REST do WCF, o .NET Framework permite aproveitar o cache de saída declarativo disponível no ASP.NET. Isso permite armazenar em cache as respostas das operações de serviço REST do WCF. Quando um usuário envia uma solicitação HTTP GET para um serviço que está configurado para armazenar em cache, o ASP.NET envia a resposta armazenada em cache novamente e o método de serviço não é chamado. Depois que o cache expirar, na próxima vez que um usuário enviar uma solicitação HTTP GET, o método de serviço será chamado e a resposta será armazenada em cache novamente.

O .NET Framework também permite implementar o cache de HTTP GET condicional. Em cenários REST, uma solicitação de HTTP GET condicional é geralmente usada pelos serviços para implementar o cache inteligente de HTTP, conforme descrito na Especificação de HTTP. Para obter mais informações, consulte Suporte ao cache em serviços Web HTTP do WCF.

Estendendo o cache no .NET Framework

O cache do .NET Framework foi projetado para ser extensível. A classe ObjectCache permite criar uma implementação personalizada de cache. Essa classe fornece os membros que estão disponíveis para todos os aplicativos gerenciados, incluindo o Windows Forms, o WPF (Windows Presentation Foundation) e o WCF (Windows Communications Foundation). Você pode fazer isso para criar uma classe de cache que usa outro mecanismo de armazenamento ou se desejar ter um controle granular sobre as operações de cache.

Para estender o cache, faça o seguinte:

Para obter mais informações, confira a entrada Cache de saída extensível com o ASP.NET 4 (Série sobre o VS 2010 e o .NET Framework 4.0) no blog de Scott Guthrie.

Confira também