Кэширование в приложениях .NET Framework

Кэширование позволяет хранить данные в памяти для быстрого доступа. При повторном доступе к данным приложения могут получать данные из кэша, а не извлекать их из исходного источника. Это может повысить производительность и масштабируемость. Кроме того, кэширование делает данные доступными при временной недоступности источника данных.

Платформа .NET Framework предоставляет функции кэширования, которые можно использовать для повышения производительности и масштабируемости клиентских и серверных приложений Windows, включая ASP.NET.

Замечание

В .NET Framework 3.5 и более ранних версиях ASP.NET предоставлял реализацию кэша в памяти в пространстве имен System.Web.Caching. В предыдущих версиях .NET Framework кэширование было доступно только в пространстве имен System.Web и, следовательно, требуется зависимость от классов ASP.NET. В .NET Framework 4 System.Runtime.Caching пространство имен содержит API, предназначенные для Веб-приложений и не Веб-приложений.

Кэширование данных

Сведения можно кэшировать с помощью классов в System.Runtime.Caching пространстве имен. Классы кэширования в этом пространстве имен предоставляют следующие функции:

  • Абстрактные типы, предоставляющие основу для создания пользовательских реализаций кэша.

  • Реализация конкретного кэша объектов в памяти.

Абстрактный базовый класс кэширования (ObjectCache) определяет следующие задачи кэширования:

  • Создание записей кэша и управление ими.

  • Указание сведений об истечении срока действия и удаления.

  • Активация событий, создаваемых в ответ на изменения записей кэша.

Класс MemoryCache — это реализация кэша объектов класса ObjectCache в памяти. Вы можете использовать класс MemoryCache для большинства задач кэширования.

Замечание

Класс MemoryCache моделируется по объекту кэша ASP.NET, определенному в пространстве имен System.Web.Caching. Таким образом, внутренняя логика кэширования аналогична логике, предоставленной в более ранних версиях ASP.NET.

Пример использования кэширования в приложении WPF см. в пошаговом руководстве. Кэширование данных приложения в приложении WPF.

Кэширование в приложениях ASP.NET

Классы кэширования в System.Runtime.Caching пространстве имен предоставляют функциональные возможности кэширования данных в ASP.NET.

Замечание

Если ваше приложение предназначено для .NET Framework 3.5 или более старой версии, необходимо использовать классы кэширования, определенные в пространстве имен System.Web.Caching. Дополнительные сведения см. в разделе ASP.NET Обзор кэширования.

Замечание

При разработке новых приложений рекомендуется использовать MemoryCache класс. API, предоставляемый в пространстве имен System.Runtime.Caching, похож на API, предоставляемый в пространстве имен Cache. Поэтому API будет знаком, если вы использовали кэширование в более ранних версиях ASP.NET. Пример использования кэширования в приложениях ASP.NET см. в пошаговом руководстве. Кэширование данных приложения в ASP.NET.

Кэширование выходных данных

Чтобы вручную кэшировать данные приложения, можно использовать MemoryCache класс в ASP.NET. ASP.NET также поддерживает кэширование выходных данных, в которых хранятся созданные выходные данные страниц, элементов управления и HTTP-ответов в памяти. Когда последующий запрос соответствует кэшированному ответу, ASP.NET обслуживает сохраненные выходные данные вместо повторного создания. Вы можете настроить кэширование выходных данных декларативно на веб-странице ASP.NET или с помощью параметров в файле Web.config. Дополнительные сведения см. в разделе outputCache Element для кэширования (схема параметров ASP.NET).

Один ресурс часто имеет несколько представлений. Например, страница продукта зависит от идентификатора продукта, представление повестки дня зависит от даты, а локализованное содержимое зависит от языка или языка и региональных параметров. VaryBy такие параметры, как VaryByParam, VaryByHeader, VaryByCustom и VaryByContentEncoding, позволяют кэшированию выходных данных выбирать и кэшировать эти альтернативные представления на основе характеристик запроса. Кэширование выходных данных служит представлением, которое соответствует каждому запросу.

Important

Кэширование выходных данных — это функция оптимизации производительности. VaryBy Параметры предназначены для кэширования альтернативных представлений ресурса на основе характеристик запроса. Не следует полагаться на варианты кэширования для обеспечения изоляции между типами содержимого, включая персонализированные ответы, ответы, относящиеся к конкретному тенанту, зависящие от авторизации, и иные конфиденциальные ответы. Обеспечьте любую требуемую изоляцию независимо от конфигурации кэша.

ASP.NET позволяет расширить кэширование выходных данных путем создания пользовательских поставщиков кэша выходных данных. С помощью настраиваемых поставщиков можно хранить кэшированное содержимое с помощью других устройств хранения, таких как диски, облачное хранилище и подсистемы распределенного кэша. Чтобы создать поставщик пользовательского кэша выходных данных, создайте класс, производный от OutputCacheProvider класса, и настройте приложение для использования поставщика пользовательского кэша выходных данных.

Кэширование в службах REST WCF

Для служб REST WCF платформа .NET Framework позволяет использовать декларативное кэширование выходных данных, доступное в ASP.NET. Это позволяет кэшировать ответы из операций службы REST WCF. Когда пользователь отправляет HTTP-запрос GET в службу, настроенную для кэширования, ASP.NET отправляет кэшированный ответ, а метод службы не вызывается. После истечения срока действия кэша в следующий раз, когда пользователь отправляет HTTP-запрос GET, вызывается метод службы, а ответ снова кэшируется.

Платформа .NET Framework также позволяет реализовать условное кэширование HTTP GET. В сценариях REST условный HTTP-запрос GET часто используется службами для реализации интеллектуального кэширования HTTP, как описано в спецификации HTTP. Дополнительные сведения см. в разделе "Поддержка кэширования для веб-служб WCF Web HTTP".

Расширение кэширования в .NET Framework

Кэширование в .NET Framework предназначено для расширения. Класс ObjectCache позволяет создать пользовательскую реализацию кэша. Этот класс предоставляет элементы, доступные всем управляемым приложениям, включая Windows Forms, Windows Presentation Foundation (WPF) и Windows Communications Foundation (WCF). Это можно сделать для создания класса кэша, использующего другой механизм хранения, или, если требуется детализированный контроль над операциями кэша.

Чтобы расширить кэширование, можно выполнить следующее:

Дополнительные сведения см. в записи Расширяемый кэширование выходных данных с помощью ASP.NET 4 (VS 2010 и .NET Framework 4.0 серии) в блоге Скотта Гатри.

См. также