Compartilhar via


Demonstra Passo a passo: Cache de dados de aplicativo em um aplicativo WPF

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 disso, recuperá-lo a partir da fonte original. Isso 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 o cache em aplicativos de.NET Framework . Essas classes estão localizadas na System.Runtime.Caching namespace.

Observação

O System.Runtime.Caching namespace é novo na .NET Framework 4.Este namespace faz cache está disponível para todos os .NET Framework aplicativos.Nas versões anteriores da .NET Framework, cache estava disponível apenas na System.Web namespace e portanto necessária uma dependência no ASP.Classes NET.

Esta explicação passo a passo mostra como usar a funcionalidade de cache está disponível na .NET Framework como parte de um Windows Presentation Foundation (WPF) 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 projeto de aplicativo do WPF.

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

  • Inicializando um cache.

  • Adicionando uma entrada de cache que contém o conteúdo de um arquivo de texto.

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

  • O caminho do arquivo em cache de monitoramento e notificar a ocorrência de cache sobre alterações no item monitorado.

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 do arquivo de texto em uma caixa de mensagem). O código ilustrado na explicação passo a passo presume que você está trabalhando com o seguinte arquivo:

    c:\cache\cacheText.txt

    No entanto, você pode usar qualquer arquivo de texto e fazer pequenas alterações no código desta explicação passo a passo.

Criando um projeto de aplicativo do WPF

Você começará criando um projeto de aplicativo do WPF.

To create a WPF application

  1. Start Visual Studio.

  2. No arquivo menu, clique em novae em seguida, clique em Novo projeto.

    The New Project dialog box is displayed.

  3. Em Modelos instalados, selecione a linguagem de programação que você deseja usar (Visual Basic ou Visual C#).

  4. No Novo projeto caixa de diálogo, selecione Aplicativo WPF.

    Observação

    Se você não vir o Aplicativo WPF modelo, certifique-se de que direcionamento de uma versão do .NET Framework que suporta o WPF.No Novo projeto caixa de diálogo, selecione .NET Framework 4 da lista.

  5. No nome texto, digite um nome para seu projeto. Por exemplo, você pode digitar WPFCaching.

  6. Selecione o Create directory for solution caixa de seleção.

  7. Click OK.

    O WPF Designer abre no Design exibir e exibe o arquivo de MainWindow. XAML. Visual Studiocria o My Project pasta, o arquivo Application e o arquivo de MainWindow. XAML.

Direcionamento do.NET Framework e adicionando uma referência para os cache de Assemblies

Por padrão, o destino de aplicativos do WPF a .NET Framework 4 Client Profile. Para usar o System.Runtime.Caching namespace em um aplicativo WPF, o aplicativo deve usar o .NET Framework 4 (não o .NET Framework 4 Client Profile) e deve incluir uma referência ao namespace.

Portanto, a próxima etapa é alterar o.NET de destino do Framework e adicionar uma referência para o System.Runtime.Caching namespace.

Observação

O procedimento para alterar o.NET Framework de destino é diferente de um projeto de Visual Basic e em um projeto do Visual C#.

Para alterar o destino.NET Framework em Visual Basic

  1. Em Explorer de soluções, clique com o botão direito no nome do projeto e, em seguida, clique em Propriedades.

    A janela de propriedades para o aplicativo é exibida.

  2. Click the Compile tab.

  3. Na parte inferior da janela, clique em Avançadas opções de compilação ….

    O Advanced Compiler Settings caixa de diálogo é exibida.

  4. No a estrutura de destino (todas as configurações) lista, selecione .NET Framework 4. (Não selecione .NET Framework 4 Client Profile.)

  5. Click OK.

    O Alteração da estrutura de destino caixa de diálogo é exibida.

  6. No Alteração da estrutura de destino caixa de diálogo, clique em Sim.

    O projeto é fechado e é reaberto.

  7. Adicione uma referência ao assembly do cache, seguindo estas etapas:

    1. Em Solution Explorer, o botão direito do mouse no nome do projeto e, em seguida, clique em Adicionar referência de.

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

Para alterar o destino.NET Framework em um projeto do Visual C#

  1. Em Solution Explorer, o botão direito do mouse no nome do projeto e, em seguida, clique em Propriedades.

    A janela de propriedades para o aplicativo é exibida.

  2. Click the Application tab.

  3. No estrutura de destino lista, selecione .NET Framework 4. (Não selecione .4 Do NET Framework Client Profile.)

  4. Adicione uma referência ao assembly do cache, seguindo estas etapas:

    1. Com o botão direito do referências pasta e clique Adicionar referência de.

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

Adicionando um botão na janela do WPF

Em seguida, você adicionará um controle button e criar um manipulador de eventos para o botão Click de evento. Posteriormente, você adicionará um código para que quando você clica no botão, o conteúdo do arquivo de texto é armazenados em cache e exibido.

Para adicionar um controle de botão

  1. Em Solution Explorer, clique duas vezes no arquivo de MainWindow. XAML para abri-lo.

  2. Do Toolbox, em Controles comuns do WPF, arraste um Button o controle para o MainWindow janela.

  3. No Propriedades janela, defina a Content propriedade da Button control para obter o Cache.

Inicializando 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 classe cache — ou seja, você irá instanciar uma nova MemoryCache objeto.

  • 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. Clique duas vezes no botão que você acabou de adicionar para criar um manipulador de eventos no arquivo MainWindow.xaml.cs ou MainWindow.Xaml.vb.

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

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

    ObjectCache cache = MemoryCache.Default;
    
    Dim cache As ObjectCache = MemoryCache.Default
    

    O ObjectCache é uma classe interna que fornece um objeto na memória cache.

  4. Adicione o seguinte código para ler o conteúdo de uma entrada de cache chamado filecontents:

    Dim fileContents As String = TryCast(cache("filecontents"), String)
    
    string fileContents = cache["filecontents"] as string;
    
  5. Adicione o seguinte código para verificar se a entrada de cache chamado filecontents existe:

    If fileContents Is Nothing Then
    
    End If
    
    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 CacheItemPolicy objeto que especifica que a entrada de cache expira após 10 segundos.

    Dim policy As New CacheItemPolicy()
    policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
    
    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 as entradas de cache nunca expirar com base apenas em um tempo absoluto. Em vez disso, as entradas de cache 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.

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

    Dim filePaths As New List(Of String)()
    filePaths.Add("c:\cache\cacheText.txt")
    
    List<string> filePaths = new List<string>();
    filePaths.Add("c:\\cache\\cacheText.txt");
    

    Observação

    Se o arquivo de texto que você deseja usar não está c:\cache\cacheText.txt, especifique o caminho onde o arquivo de texto é o que você deseja usar.

  8. Após o código que você adicionou na etapa anterior, adicione o seguinte código para adicionar um novo HostFileChangeMonitor o objeto à coleção de alteração monitora a entrada de cache:

    policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
    
    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 expirará se o conteúdo do arquivo é alterado.

  9. Seguindo o código que você adicionou na etapa anterior, adicione o seguinte código para ler o conteúdo do arquivo de texto:

    fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()
    
    fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + + "\n" + DateTime.Now; 
    

    O carimbo de data e hora em hora é adicionado para que você poderá ver quando a entrada de cache expira.

  10. Após o código que você adicionou na etapa anterior, adicione o seguinte código para inserir o conteúdo do arquivo para o objeto do cache como um CacheItem instância:

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

    Você especificar informações sobre como a entrada de cache deve ser removida, passando a CacheItemPolicy o objeto que você criou anteriormente como um parâmetro.

  11. Após a if/then Bloquear, adicione o seguinte código para exibir o conteúdo do arquivo em cache em uma caixa de mensagem:

    MessageBox.Show(fileContents)
    
    MessageBox.Show(fileContents);
    
  12. No Build menu, clique em wpfcaching Build para construir o projeto.

Teste de cache no aplicativo do WPF

Agora você pode testar o aplicativo.

Para testar o aplicativo WPF de cache

  1. Pressione CTRL + F5 para executar o aplicativo.

    O MainWindow janela é exibida.

  2. Clique em obter Cache.

    O conteúdo em cache do arquivo de texto é exibido em uma caixa de mensagem. Observe o carimbo de hora no arquivo.

  3. Feche a caixa de mensagem e clique em Obter 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 Cache novamente.

    Neste momento, um novo carimbo de hora é exibido. Isso indica que a diretiva permitem a entrada de cache expirar e que o novo conteúdo em cache é exibido.

  5. Em um editor de texto, abra o arquivo de texto que você criou. Não faça quaisquer alterações ainda.

  6. Feche a caixa de mensagem e clique em Obter Cache novamente**.**

    Observe o carimbo de hora novamente.

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

  8. Feche a caixa de mensagem e clique em Obter Cache novamente.

    Esta caixa de mensagem contém o conteúdo atualizado do arquivo de texto e um novo carimbo de hora. Isso indica que o monitor de alteração de arquivo de host removido a entrada de cache imediatamente quando você alterou o arquivo, mesmo que o período de expiração absoluta não tivesse expirado.

    Observação

    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 o projeto que você criou parecerá com o exemplo a seguir.

Imports System.Runtime.Caching
Imports System.IO

Class MainWindow

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) 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)()
            filePaths.Add("c:\cache\cacheText.txt")
            policy.ChangeMonitors.Add(New  _
                HostFileChangeMonitor(filePaths))

            ' Fetch the file contents.
            fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()
            cache.Set("filecontents", fileContents, policy)
        End If
        MessageBox.Show(fileContents)
    End Sub
End Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.Caching;
using System.IO;


namespace WPFCaching
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs 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>();
                filePaths.Add("c:\\cache\\cacheText.txt");

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

                // Fetch the file contents.
                fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now.ToString();

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

            }
            MessageBox.Show(fileContents);


        }
    }
}

Consulte também

Referência

MemoryCache

ObjectCache

System.Runtime.Caching

Conceitos

Armazenamento em cache no.NET Framework aplicativos