Практическое руководство. Кэширование выходных данных страницы с использованием файловых зависимостей
Обновлен: Ноябрь 2007
Иногда при изменении файла требуется удаление страницы из кэша вывода. Например, имеется страница, возвращающая содержимое кэша из отчета, интенсивно использующего процессы, который создает XML-файл на выходе. Повторная обработка страницы необходима только при наличии изменений в XML-файле. Для ограничения повторной обработки в то время, когда это необходимо, можно использовать создание связи политики кэширования страницы с отдельным файлом. В случае необходимости можно создать связь кэшированной страницы с несколькими файлами.
Примечание. |
---|
Можно явным образом удалить любую страницу из кэша вывода при вызове метода RemoveOutputCacheItem. Это можно сделать из файла Global.asax, из пользовательского серверного элемента управления ASP.NET или из страницы, в зависимости от того, что требуется для работы приложения. |
Создание зависимости между кэшированными входными данными страницы и файлом
Декларативно или программно задайте параметры кэширования выходных данных страницы. Дополнительные сведения см. в разделах Практическое руководство. Задание срока действия для кэширования страниц ASP.NET, Задание возможности кэширования страницы и Кэширование нескольких версий страницы.
Вызовите метод AddFileDependency в данной кодовой странице. Путь к файлу, в котором создается зависимость, передается в качестве параметра filename метода.
В следующем примере кода задается файловая зависимость для файла TextFile1.txt. При наличии изменений в файле выходные данные страницы будут удалены из кэша.
protected void Page_Load(object sender, EventArgs e) { string fileDependencyPath = Server.MapPath("TextFile1.txt"); Response.AddFileDependency(fileDependencyPath); // Set additional properties to enable caching. Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); }
Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles Me.Load Dim fileDependencyPath As String = _ Server.MapPath("TextFile1.txt") Response.AddFileDependency(fileDependencyPath) ' Set additional properties to enable caching. Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)) Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetValidUntilExpires(True) End Sub
Примечание. Эти методы не удается вызвать из пользовательского элемента управления ASP.NET. Однако в любом пользовательском элементе управления, в котором определяется директива @ OutputCache, можно создать файловую зависимость и присвоить ее свойству Dependency.
Создание зависимости между кэшированными выходными данными страницы и группой файлов
Декларативно или программно задайте параметры кэширования выходных данных страницы. Дополнительные сведения см. в разделах Практическое руководство. Задание срока действия для кэширования страниц ASP.NET, Задание возможности кэширования страницы и Кэширование нескольких версий страницы.
Создайте в коде страницы массив String или список массивов ArrayList, содержащий пути к файлам для создания зависимости страницы.
Вызовите метод AddFileDependencies и передайте параметр filenames в массив.
В следующем примере кода создается массив строк путей к файлам TextFile1.txt и XMLFile1.xml, а также создаются выходные данные страницы, зависящие от двух указанных файлов. Если хотя бы один из файлов был изменен, то выходные данные страницы будут удалены из кэша.
protected void Page_Load(object sender, EventArgs e) { string[] fileDependencies; string fileDependency1 = Server.MapPath("TextFile1.txt"); string fileDependency2 = Server.MapPath("XMLFile1.xml"); fileDependencies = new String[] { fileDependency1, fileDependency2 }; Response.AddFileDependencies(fileDependencies); }
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim fileDependencies() As String Dim fileDependency1 As String = Server.MapPath("TextFile1.txt") Dim fileDependency2 As String = Server.MapPath("XMLFile1.xml") fileDependencies = New String() {fileDependency1, _ fileDependency2} Response.AddFileDependencies(fileDependencies) End Sub
См. также
Задачи
Практическое руководство. Задание возможности кэширования страницы программными средствами