Compartilhar via


Passo a passo: Armazenando dados de aplicativos em cache no ASP.NET

Cache permite que você armazene dados na memória para acesso rápido. Aplicativos podem acessar o cache e não é necessário recuperar os dados da fonte original sempre que os dados são acessados. Isso evita repetidas consultas a dados, e ela pode melhorar o desempenho e escalabilidade. Além disso, o cache torna os dados disponíveis quando a fonte de dados está temporariamente indisponível.

O .NET Framework fornece classes que permitem que você use recursos de cache em ASP.NET aplicativos. Essas classes são definidas na System.Runtime.Caching namespace.

Dica

O System.Runtime.Caching namespace é novo na .NET Framework 4.Este namespace faz cache está disponível para todos os .NET Framework aplicativos.

Esta explicação passo a passo mostra como usar a funcionalidade de cache está disponível na .NET Framework como parte de um ASP.NET aplicativo. Explicação passo a passo, você armazenar em cache o conteúdo de um arquivo de texto.

Tasks illustrated in this walkthrough include the following:

  • Criando um ASP.NETsiteWeb .

  • Adicionando uma referência para o .NET Framework 4.

  • Adicionando uma entrada de cache que armazena em cache o conteúdo de um arquivo.

  • Fornecendo uma diretiva de remoção da entrada de cache.

  • O caminho do arquivo em cache de monitoramento e notificando o cache de alterações aos itens monitorados.

Pré-requisitos

In order to complete this walkthrough, you will need:

  • Microsoft Visual Studio 2010.

  • Um arquivo de texto que contém uma pequena quantidade de texto. Você irá exibir o conteúdo deste arquivo de texto em uma página Web .

Creating an ASP.NET Web Site

Você começará criando uma ASP.NETsiteWeb .

Aviso

Esta explicação passo a passo usa um projetode site de Web .Você pode usar umprojeto deaplicativode Web. Para obter informações sobre a diferença entre esses tipos deprojeto da Web, consulte Projetos de aplicativos Web versus projetos de sites da Web.

Para criar um ASP.NETsiteWeb

  1. Start Visual Studio 2010.

  2. In the File menu, click New Web Site. (Se você não vir esta opção, clique em Novoe em seguida, clique em SiteWeb.)

    O Novo Web Site caixa de diálogo é exibida.

  3. Em Modelos instalados, clique em Visual Basic ou C# e selecione ASP.NETSiteWeb .

  4. No WebLocal caixa, selecione sistema deArquivo e digite o nome da pasta onde você deseja manter as páginas do site da Web . Por exemplo, digite o nome da pasta C:\Websites\AppCaching e clique em OK.

    autenticação (ASP.NETassociação). Quando uma nova página é criada, por padrão, o Visual Web Developer exibe a página em fonte modo de exibição, onde você pode ver os elementos HTML da página.

A próxima etapa é adicionar o arquivo de texto que você deseja usar para o projetode site Web atual.

Para adicionar o arquivo de texto ao projeto

  1. Em Solution Explorer, à direita, clique no nome do projeto de-e clique em Adicionar Existing Item.

  2. No Adicionar Existing Item caixa de diálogo, selecione o arquivo de texto que você deseja usar para esta explicação passo a passo e clique em Adicionar.

Adicionando uma referência ao Assembly do cache

Para usar o System.Runtime.Cachingonamespace em um ASP.NETaplicativo, você deve adicionar uma referência ao namespace.

Para adicionar uma referência do site.

  1. Em Solution Explorer, à direita, clique no nome do Web de-e clique em Adicionar referência.

  2. Selecione o .NET guia, selecione System.Runtime.Cachinge em seguida, clique em OK.

Adicionando controles para o ASP.NET Página

A próxima etapa é adicionar um botão e um Label o controle para a página. Você irá criar um manipulador de evento para o botão Click evento. Posteriormente você adicionará código para quando você clica no botão, o texto em cache seja exibido na Label de controle.

To add controls to the page

  1. Open or switch to the Default.aspx page.

  2. Do Padrão guia da caixa de ferramentas, arraste um Button controle para o Padrão. aspx da página.

  3. No Propriedades janela, defina a Textapropriedade da Button controle para obter de Cache. Aceitar a propriedadede identificação de padrão.

  4. Do Padrão guia da caixa de ferramentas, arraste um Label controle para a página. Aceitar a propriedadede identificação de padrão.

Criando o Cache e uma entrada de cache.

Em seguida, você irá adicionar o código para executar as seguintes tarefas:

  • Criar uma instância da classede cache — ou seja, você irá instanciar o objetodo cache.

  • Especificar o cache usa um HostFileChangeMonitor o objeto para monitorar as alterações no arquivo de texto.

  • Leia o arquivo de texto e seu conteúdo em cache como uma entrada de cache.

  • Exiba o conteúdo do arquivo de texto em cache.

Para criar o objeto de cache

  1. -De duplo clique no botão para criar um manipulador de evento em Padrão. aspx. cs ou Padrão. vb arquivo.

  2. Na parte superior do arquivo (antes dadeclaraçãoda classe), adicione o seguinte Imports (Visual Basic) ou using (C#) instruções.

    [Visual Basic]

    Imports System.Runtime.Caching
    Imports System.IO
    

    [C#]

    using System.Runtime.Caching;
    using System.IO;
    
  3. No manipulador de evento , adicione o seguinte código para instanciar o cache.

    [Visual Basic]

    Dim cache As ObjectCache = MemoryCache.Default
    

    [C#]

    ObjectCache cache = MemoryCache.Default;
    

    O ObjectCache é uma classe base fornece métodos para implementar no- objetodo cache dememória .

    Dica

    Em ASP.NET 4, o cache é implementado usando o ObjectCache classe.

  4. Adicionar chamada de código a seguir para ler o conteúdo de uma entrada de cachefilecontents

    [Visual Basic]

    Dim fileContents As String = TryCast(cache("filecontents"), String)
    

    [C#]

    string fileContents = cache["filecontents"] as string;
    
  5. Adicionar o código a seguir para verificar se a entrada de cache chamado filecontents existe

    [Visual Basic]

    If fileContents Is Nothing Then
    
    End If
    

    [C#]

    if (fileContents == null)
    {
    
    }
    

    Se a entrada de cache especificado não existir, você deve ler o arquivo de texto e adicioná-la como uma entrada de cache no cache.

  6. No if/then Bloquear, adicione o seguinte código para criar uma nova CacheItemPolicyoobjeto que especifica que o cache expira após 10 segundos.

    [Visual Basic]

    Dim policy As New CacheItemPolicy()
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
    

    [C#]

    CacheItemPolicy policy = new CacheItemPolicy();
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
    

    Se nenhuma informação de remoção ou expiração for fornecida, o padrão é InfiniteAbsoluteExpiration, que significa que não expiram itens no cache de acordo com um tempo absoluto. Em vez disso, os itens expirarem somente quando há pressão de memória . Como prática recomendada, você deve fornecer sempre explicitamente absoluta ou um período de expiração exteriores. Esta explicação passo a passo, você pode usar uma expiração absoluta de 10 segundos.

  7. Dentro do if/then Bloquear e seguindo o código adicionado na etapa anterior, adicione o código a seguir para criar uma coleção para os caminhos de arquivo que você deseja monitorar e adicionar o caminho do arquivo de texto à coleção.

    [Visual Basic]

    Dim filePaths As New List(Of String)()
    Dim cachedFilePath As String = Server.MapPath("~") & _
            "\cacheText.txt"
    filePaths.Add(cachedFilePath)
    

    [C#]

    List<string> filePaths = new List<string>();
    string cachedFilePath = Server.MapPath("~") + "\\cacheText.txt";
    filePaths.Add(cachedFilePath);
    

    O HttpServerUtilityMapPath() método retorna o caminho para a raiz do site da Web atual.

  8. Seguindo o código adicionado na etapa anterior, adicione o seguinte código para adicionar um novo HostFileChangeMonitoroobjeto à coleção de alteração monitora a entradade cache.

    [Visual Basic]

    policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
    

    [C#]

    policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
    

O HostFileChangeMonitor objeto monitora o caminho do arquivo de texto e notifica o cache se ocorrerem alterações. Neste exemplo, a entrada de cache expire automaticamente se o conteúdo do arquivo for alterado.

  1. Seguindo o código adicionado na etapa anterior, adicione o seguinte código para ler o conteúdo do arquivo de texto.

    fileContents = File.ReadAllText(cachedFilePath) & vbCrLf & DateTime.Now.ToString()
    
    fileContents = File.ReadAllText(cachedFilePath) + "\n" + DateTime.Now; 
    

    O carimbo de data/hora de data e hora é adicionado para ajudá-lo a determinar quando a entrada de cache expira.

  2. Seguindo o código adicionado na etapa anterior, adicione o seguinte código para inserir o conteúdo do arquivo em cache objeto como um CacheItem instância.

    [Visual Basic]

    cache.Set("filecontents", fileContents, policy)
    

    [C#]

    cache.Set("filecontents", fileContents, policy);
    

    Você especificar informações sobre como a entrada de cache deve ser removido, passando a CacheItemPolicyoobjeto como um parâmetrode Setmétodo.

  3. Após a if/then Bloquear, adicione o seguinte código para exibir o conteúdo do arquivo em cache em um Label de controle.

    [Visual Basic]

    Label1.Text = fileContents
    

    [C#]

    Label1.Text = fileContents;
    

Testando o ASP\ de ASP.NETSiteWeb

Agora você pode testar o aplicativo.

Para teste cache em que o ASP.NETsiteWeb

  1. Pressione CTRL + F5 para executar o aplicativo.

  2. Clique em obter do Cache de.

    O conteúdo em cache no arquivo de texto é exibido no rótulo. Observe o carimbo de data/hora no final do arquivo.

  3. Clique em Obter a partir do Cache novamente.

    O carimbo de hora não é alterado. Isso indica que o conteúdo em cache é exibido.

  4. Aguarde 10 segundos ou mais e, em seguida, clique em Obter a partir do Cache novamente.

    Neste momento, um novo carimbo de hora é exibido. Isso indica que a diretiva permitem que o cache expira após 10 segundos e o novo conteúdo em cache é exibida.

  5. Em um texto editor, em aberto o arquivo de texto que você adicionou ao projetodo site da Web . Não faça quaisquer alterações ainda.

  6. Clique em Obter a partir do Cache novamente.

    Observe o carimbo de hora novamente.

  7. Fazer uma alteração no arquivo de texto e salve o arquivo.

  8. Clique em Obter a partir do Cache novamente.

    Desta vez as alterações de carimbo de data/hora imediatamente. Isso indica que o host-monitor de alteração de arquivo retirado item de cache imediatamente quando uma alteração foi feita.

    Dica

    Você pode aumentar o tempo de remoção de 20 segundos ou mais para permitir mais tempo para fazer uma alteração no arquivo.

Exemplo de código

Depois de concluir este passo a passo, o código para Web será semelhante o exemplo a seguir.

Imports System.Runtime.Caching
Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Dim cache As ObjectCache = MemoryCache.Default
        Dim fileContents As String = TryCast(cache("filecontents"), _
            String)
        If fileContents Is Nothing Then
            Dim policy As New CacheItemPolicy()
            policy.AbsoluteExpiration = _
                DateTimeOffset.Now.AddSeconds(10.0)
            Dim filePaths As New List(Of String)()
            Dim cachedFilePath As String = Server.MapPath("~") & _
                "\cacheText.txt"
            filePaths.Add(cachedFilePath)
            policy.ChangeMonitors.Add(New  _
                HostFileChangeMonitor(filePaths))

            ' Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) & _
                vbCrLf & DateTime.Now.ToString()
            cache.Set("filecontents", fileContents, policy)
        End If
        Label1.Text = fileContents
    End Sub

End Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Caching;
using System.IO;

public partial class _Default : System.Web.UI.Page
{


    protected void Button1_Click1(object sender, EventArgs e)
    {
        ObjectCache cache = MemoryCache.Default;
        string fileContents = cache["filecontents"] as string;

        if (fileContents == null)
        {
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration =
                DateTimeOffset.Now.AddSeconds(10.0);

            List<string> filePaths = new List<string>();
            string cachedFilePath = Server.MapPath("~") +
                "\\cacheText.txt";

            filePaths.Add(cachedFilePath);

            policy.ChangeMonitors.Add(new
                HostFileChangeMonitor(filePaths));

            // Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) + "\n"
                + DateTime.Now.ToString();

            cache.Set("filecontents", fileContents, policy);

        }

        Label1.Text = fileContents;
    }
}

Próximas etapas

Em ASP.NET, você pode usar várias implementações de cache em cache os dados. Para obter mais informações, consulte o cache de dados de aplicativos por usando vários objetos de Cache em um ASP.NET aplicativo.

Consulte também

Referência

MemoryCache

ObjectCache

Conceitos

Armazenamento em cache no.NET Framework aplicativos