Общие сведения о кэшировании в ASP.NET

Обновлен: Ноябрь 2007

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

Чтобы помочь увеличить производительность приложений в данных ситуациях, платформа ASP.NET предоставляет два основных метода кэширования. Первый — это кэш приложения, позволяющий кэшировать создаваемые данные, такие как набор DataSet или бизнес-объект настраиваемого отчета. Второй представляет собой кэш вывода страницы, сохраняющий вывод обработки страницы и повторно использующий этот вывод при повторном запросе этой страницы пользователем.

Кэш приложения

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

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

Дополнительные сведения см. в разделе Практическое руководство. Извлечение значений кэшированных элементов.

Кэш вывода страницы

Кэш вывода страницы сохраняет в памяти содержимое обработанной страницы ASP.NET. Это позволяет платформе ASP.NET посылать ответ страницы клиенту без выполнения повторного цикла обработки страницы. Кэш вывода страницы особенно полезен для редко меняющихся страниц, для создания которых требуется долгая обработка. Например, при создании веб-страницы с высоким трафиком, предназначенной для отображения редко обновляемой информации, кэш вывода страницы может сильно повысить производительность данной страницы. Кэш страницы может быть настроен для каждой страницы отдельно; также можно создать в файле Web.config профили кэширования, позволяющие однократно определить параметры кэширования и затем использовать их для нескольких страниц.

Кэш вывода страницы предоставляет два метода кэширования страницы: полное кэширование страницы и частичное кэширование страницы. Полное кэширование страницы позволяет сохранить все части страницы в памяти и использовать их для выполнения запроса клиента. Частичное кэширование страницы позволяет сохранить одни части страницы в кэше, в то время как другие части страницы остаются динамическими. Дополнительные сведения см. в разделе Кэширование страниц ASP.NET.

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

Подстановка после кэширования является противоположным по своему действию методом. Вся страница кэшируется, однако фрагменты страницы остаются динамическими. Например, если создать страницу, которая является статической в течение заданного периода времени, можно указать, что вся страница должна быть помещена в кэш. При добавлении на страницу элемента управления Label, который отображает имя пользователя, элемент управления Label будет оставаться одним и тем же при каждом обновлении страницы и для каждого пользователя, отображая имя пользователя, запросившего страницу перед ее кэшированием. Тем не менее, при использовании подстановки после кэширования всю страницу можно поместить в кэш, но при этом отметить отдельные части страницы как некэшируемые. В таком случае можно добавить элементы управления Label в некэшируемую часть, и они будут создаваться динамически для каждого пользователя при каждом запросе страницы. Дополнительные сведения см. в разделе Кэширование частей страницы ASP.NET.

Кэширование страниц на основе параметров запроса

В дополнение к кэшированию единственной версии страницы кэширование вывода страницы ASP.NET предоставляет возможности по созданию нескольких версий страницы, различающихся по параметрам запроса. Дополнительные сведения см. в разделе Кэширование нескольких версий страницы.

Автоматическое удаление данных

Платформа ASP.NET может удалить данные из кэша по одной из следующих причин:

  • На сервере не хватает памяти (этот процесс называется очисткой).

  • Истек срок действия элемента в кэше.

  • Изменилась зависимость элемента.

Упрощая управление кэшированными элементами, платформа ASP.NET может уведомлять приложение об удалении элементов из кэша.

Очистка

Очистка — это процесс удаления элементов из кэша при нехватке памяти. Элементы удаляются, если к ним долгое время не было обращений, или же если элементы при добавлении в кэш были помечены как низкоприоритетные. Для определения тех элементов, которые нужно удалить в первую очередь, ASP.NET использует объект CacheItemPriority. Дополнительные сведения см. в разделе Практическое руководство. Добавление элементов в объект Cache.

Истечение срока действия

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

Тип срока действия

Описание

Скользящий срок действия

Определяет срок действия элемента со времени последнего обращения. Например, можно задать истечение срока действия элемента спустя 20 минут после последнего обращения к нему в кэше.

Абсолютный срок действия

Определяет срок действия предмета независимо от частоты обращений. Например, можно задать истечение срока действия элемента в 18:00 или же спустя четыре часа.

Зависимости

Можно настроить срок хранения элемента в кэше в зависимости от других элементов приложения, таких как файлы или базы данных. При изменении элемента, от которого зависит элемент в кэше, ASP.NET удаляет элемент из кэша. Например, если веб-узел отображает отчет, созданный приложением по XML-файлу, можно поместить данный отчет в кэш и настроить его так, чтобы он зависел от XML-файла. Когда XML-файл будет изменен, ASP.NET удалит отчет из кэша. Когда код запросит отчет, код сначала определит, находится ли отчет в кэше, и если нет — код создаст его. Таким образом, всегда будет доступна самая последняя версия отчета.

Кэш ASP.NET поддерживает зависимости, описанные в следующей таблице.

Зависимость

Описание

Зависимость по ключу

Элементы в кэше приложения хранятся в парах "ключ-значение". Зависимость по ключу позволяет элементу зависеть от ключа другого элемента в кэше приложения. Когда исходный элемент удаляется, удаляется также и элемент, имеющий зависимость по ключу. Например, можно добавить в кэш элемент с именем ReportsValid и кэшировать несколько отчетов, зависимых от ключа ReportsValid. Когда элемент ReportsValid будет удален из кэша, все зависимые кэшированные отчеты также будут удалены из кэша.

Зависимость от файла

Элемент в кэше зависит от внешнего файла. Если файл изменится или будет удален, кэшированный элемент будет удален.

Зависимость от SQL

Элемент в кэше зависит от изменений в таблице базы данных Microsoft SQL Server 2005, SQL Server 2000 или SQL Server 7.0. В случае SQL Server 2005 элемент может зависеть от строки в таблице. Дополнительные сведения см. в разделе Кэширование в ASP.NET с помощью класса SqlCacheDependency.

Зависимость от статистического выражения

Элемент в кэше зависит от нескольких элементов; зависимость при этом задается с помощью класса AggregateCacheDependency. Если зависимости будут каким-либо образом изменены, элемент будет удален из кэша.

Настраиваемая зависимость

Элемент в кэше настраивается на зависимость, созданную в коде разработчика. Например, можно создать настраиваемую зависимость кэша от веб-службы, при которой данные из кэша будут удаляться, если вызов веб-службы возвращает определенное значение.

Уведомление приложения об удалении элемента из кэша

Приложение может получать уведомления об удалении элемента из кэша приложения. Например, если имеется элемент, требующий для создания большое количество времени обработки, уведомления о его удалении из кэша можно использовать для того, чтобы немедленно заменить его. В результате в следующий раз при запросе элемента пользователю не придется ждать обработки элемента. Дополнительные сведения см. в разделе Практическое руководство. Уведомление приложения об удалении элемента из кэша.

См. также

Задачи

Практическое руководство. Кэширование выходных данных страницы с использованием файловых зависимостей

Основные понятия

Кэширование страниц ASP.NET

Кэширование данных приложения

Кэширование в ASP.NET с помощью класса SqlCacheDependency