Пошаговое руководство. Кэширование данных приложения WPF
Кэширование позволяет хранить данные в памяти для быстрого доступа. При повторном доступе к данным приложения могут получать их из кэша вместо извлечения из исходного источника. Это может повысить производительность и масштабируемость. Кроме того, кэширование обеспечивает доступность данных при временной недоступности источника данных.
.NET Framework Предоставляет классы, которые позволяют использовать кэширование в .NET Framework приложений. Эти классы находятся в папке System.Runtime.Caching пространства имен.
Note
System.Runtime.Caching Пространство имен впервые появилось в .NET Framework 4. Это пространство имен обеспечивает кэширование доступен для всех .NET Framework приложений. В предыдущих версиях .NET Framework кэширование было доступно только в пространстве имен System.Web и поэтому требовало зависимости от классов ASP.NET.
В этом пошаговом руководстве показано, как использовать функции кэширования, которая доступна в .NET Framework как часть Windows Presentation Foundation (WPF) приложения. В этом пошаговом руководстве кэшировать содержимое текстового файла.
В данном пошаговом руководстве представлены следующие задачи:
Создание проекта приложения WPF.
Добавление ссылки на .NET Framework 4.
Инициализация кэша.
Добавление записи кэша, который содержит содержимое текстового файла.
Предоставление используется политика вытеснения для записи кэша.
Отслеживание пути кэшированный файл и уведомление о экземпляра кэша изменения отслеживаемого элемента.
Предварительные требования
Для выполнения данного пошагового руководства требуется:
Microsoft Visual Studio 2010.
Текстовый файл, который содержит небольшой объем текста. (Содержимое файла текст будет отображаться в окне сообщения.) Код, показанный в этом пошаговом руководстве предполагается, что вы работаете в следующем файле:
c:\cache\cacheText.txt
Тем не менее можно использовать любой текстовый файл и внести небольшие изменения в код в этом пошаговом руководстве.
Создание проекта приложения WPF
Начнем с создания проекта приложения WPF.
Создание приложения WPF
Запустите Visual Studio.
В файл меню, щелкните New, а затем нажмите кнопку новый проект.
Откроется диалоговое окно Новый проект.
В разделе установленные шаблоны, выберите язык программирования, который вы хотите использовать (Visual Basic или Visual C#).
В новый проект выберите приложение WPF.
Note
Если вы не видите приложение WPF шаблона, убедитесь, что вы используете версию .NET Framework поддерживает WPF. В новый проект выберите .NET Framework 4 из списка.
В имя текстовое поле, введите имя для проекта. Например, можно ввести WPFCaching.
Установите флажок Создать каталог для решения.
Нажмите кнопку ОК.
Откроется конструктор WPF в разработки просмотра и отображает файл MainWindow.xaml. Visual Studio создает Мой проект папка, файл Application.xaml и файл MainWindow.xaml.
Нацеливание на платформу .NET Framework и Добавление ссылки на сборки кэширования
По умолчанию приложения WPF предназначены .NET Framework 4 (клиентский профиль). Чтобы использовать System.Runtime.Caching пространства имен в приложении WPF, приложение должно использовать платформу .NET Framework 4 (не .NET Framework 4 (клиентский профиль)) и необходимо включить ссылку на пространство имен.
Таким образом, следующим шагом является изменение целевой платформы .NET Framework и добавьте ссылку на System.Runtime.Caching пространства имен.
Note
Процедура изменения целевой платформы .NET Framework отличается в проекте Visual Basic и в проекте Visual C#.
Изменение целевой платформы .NET Framework в Visual Basic
В обозревателя решений, щелкните правой кнопкой мыши имя проекта и нажмите кнопку свойства.
Откроется окно свойств для приложения.
Откройте вкладку Компиляция.
В нижней части окна, щелкните Дополнительные параметры компиляции... .
Дополнительные параметры компилятора диалоговое окно.
В целевой платформы (все конфигурации) выберите .NET Framework 4. (Не выбирайте .NET Framework 4 (клиентский профиль).)
Нажмите кнопку ОК.
Откроется диалоговое окно Изменение целевой рабочей среды.
В Изменение целевой платформы диалоговом окне щелкните Да.
Проект будет закрыт и вновь открыт.
Добавьте ссылку на сборку кэширования, выполнив следующие действия:
В обозревателе решений, щелкните правой кнопкой мыши имя проекта и нажмите кнопку добавить ссылку.
Выберите .NET выберите
System.Runtime.Caching
, а затем нажмите кнопку ОК.
Изменение целевой платформы .NET Framework в проекте Visual C#
В обозревателе решений, щелкните правой кнопкой мыши имя проекта и нажмите кнопку свойства.
Откроется окно свойств для приложения.
Перейдите на вкладку Приложение .
В требуемой версии .NET framework выберите .NET Framework 4. (Не выбирайте клиентский профиль .NET Framework 4.)
Добавьте ссылку на сборку кэширования, выполнив следующие действия:
Щелкните правой кнопкой мыши ссылки папку и нажмите кнопку добавить ссылку.
Выберите .NET выберите
System.Runtime.Caching
, а затем нажмите кнопку ОК.
Добавление кнопки в окне WPF
Затем добавьте элемент управления button и создайте обработчик событий для кнопки Click
событий. Позже будет добавлен код, поэтому при нажатии кнопки, кэшируются и отображается содержимое текстового файла.
Чтобы добавить элемент управления button
В обозревателе решений, дважды щелкните файл MainWindow.xaml, чтобы открыть его.
Из элементовв разделе стандартных элементов управления WPF, перетащите
Button
управленияMainWindow
окна.В свойства окне
Content
свойствоButton
управления получить кэш.
Инициализация кэша и кэширование записи
Далее добавим код для выполнения следующих задач:
Создайте экземпляр класса кэша — то есть будет создавать новый MemoryCache объекта.
Укажите, что кэш использует HostFileChangeMonitor объектов для отслеживания изменений в текстовом файле.
Чтение текстового файла и кэшировать его содержимое в качестве записи кэша.
Отображение содержимого кэшированного текстового файла.
Чтобы создать объект кэша
Дважды щелкните кнопку, которую вы только что добавили для создания обработчика событий в файле MainWindow.xaml.cs или MainWindow.Xaml.vb.
В верхней части файла (перед объявлением класса), добавьте следующий код
Imports
(Visual Basic) илиusing
операторы (C#):using System.Runtime.Caching; using System.IO;
Imports System.Runtime.Caching Imports System.IO
В обработчике событий добавьте следующий код для создания экземпляра объекта кэша:
ObjectCache cache = MemoryCache.Default;
Dim cache As ObjectCache = MemoryCache.Default
ObjectCache Класс является встроенный класс, который предоставляет кэш в памяти объект.
Добавьте следующий код для чтения содержимого записи кэша с именем
filecontents
:Dim fileContents As String = TryCast(cache("filecontents"), String)
string fileContents = cache["filecontents"] as string;
Добавьте следующий код для проверки, является ли запись кэша с именем
filecontents
существует:If fileContents Is Nothing Then End If
if (fileContents == null) { }
Если указанная запись кэша не существует, необходимо прочитать текстовый файл и добавить его в качестве записи кэша в кэш.
В
if/then
block, добавьте следующий код для создания нового CacheItemPolicy , указывающий, что срок действия записи кэша истекает через 10 секунд.Dim policy As New CacheItemPolicy() policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0)
CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0);
Если нет сведений о удаления или истечения срока действия, по умолчанию используется InfiniteAbsoluteExpiration, означающее записей кэша, которые никогда не истекать только по абсолютным временем. Вместо этого записей кэша истекает только в том случае, если имеется достаточный объем памяти. Рекомендуется следует всегда явно задавать абсолютный или скользящий срок действия.
Внутри
if/then
блокировать и после кода, добавленного на предыдущем шаге, добавьте следующий код, чтобы создать коллекцию для пути к файлам, которые необходимо отслеживать, а также, добавляемый в коллекцию путь файла текста: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");
Note
Если текстовый файл, вы хотите использовать не
c:\cache\cacheText.txt
, укажите путь, где вы хотите использовать текстовый файл.После кода, добавленного на предыдущем шаге, добавьте следующий код, чтобы добавить новый HostFileChangeMonitor отслеживает объект в коллекцию изменение для записи кэша:
policy.ChangeMonitors.Add(New HostFileChangeMonitor(filePaths))
policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));
HostFileChangeMonitor Объект отслеживает путь файла текста и уведомляет кэш в том случае, если происходят изменения. В этом примере запись кэша истекает при изменении содержимого файла.
После кода, добавленного на предыдущем шаге добавьте следующий код для считывания содержимого текстового файла:
fileContents = File.ReadAllText("c:\cache\cacheText.txt") & vbCrLf & DateTime.Now.ToString()
fileContents = File.ReadAllText("c:\\cache\\cacheText.txt") + "\n" + DateTime.Now;
Отметка даты и времени добавляется таким образом, можно видеть, по истечении срока действия записи кэша.
После кода, добавленного на предыдущем шаге, добавьте следующий код, чтобы вставить содержимое файла в объект кэша в качестве CacheItem экземпляр:
cache.Set("filecontents", fileContents, policy)
cache.Set("filecontents", fileContents, policy);
Укажите сведения о способе записи кэша, передав CacheItemPolicy объект, созданный ранее в качестве параметра.
После
if/then
block, добавьте следующий код для отображения содержимого кэшированного файла в окне сообщения:MessageBox.Show(fileContents)
MessageBox.Show(fileContents);
В построения меню, щелкните построения WPFCaching для сборки проекта.
Проверка кэширования в приложении WPF
Теперь можно протестировать приложение.
Проверка кэширования в приложении WPF
Нажмите CTRL+F5, чтобы запустить приложение.
MainWindow
Откроется диалоговое окно.Нажмите кнопку получить кэш.
Кэшированное содержимое из текстового файла отображается в окне сообщения. Обратите внимание, что отметка времени на файл.
Закройте окно сообщения и нажмите кнопку получить кэш еще раз.
Метка времени не изменяется. Это означает, что отображается кэшированное содержимое.
Подождите 10 секунд или более, а затем нажмите кнопку получить кэш еще раз.
Это время отображается новой метки времени. Это означает, что политики сообщите кэша истек и что отображается новое кэшированное содержимое.
В текстовом редакторе откройте текстовый файл, который вы создали. Еще не следует вносить любые изменения.
Закройте окно сообщения и нажмите кнопку получить кэш еще раз.
Обратите внимание, что отметка времени еще раз.
Внести изменения в текстовый файл и сохраните файл.
Закройте окно сообщения и нажмите кнопку получить кэш еще раз.
Это окно сообщения содержит обновленное содержимое из текстового файла и новой метки времени. Это означает, что монитор изменений файла узла удалил запись кэша сразу после внесения изменений файл, несмотря на то, что не истек абсолютный период.
Note
Можно увеличить время вытеснения, в 20 секунд или более, чтобы предоставить больше времени для внесения изменений в файле.
Пример кода
После завершения этого пошагового руководства, код для созданного проекта будет выглядеть следующим образом.
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);
}
}
}